! function(t, e) {
	"object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ?
		define(["exports"], e) : e(t.echarts = {})
}(this, function(t) {
	"use strict";

	function e(t) {
		var e = {},
			n = {},
			i = t.match(/Firefox\/([\d.]+)/),
			r = t.match(/MSIE\s([\d.]+)/) || t.match(/Trident\/.+?rv:(([\d.]+))/),
			a = t.match(/Edge\/([\d.]+)/),
			o = /micromessenger/i.test(t);
		return i && (n.firefox = !0, n.version = i[1]), r && (n.ie = !0, n.version = r[1]), a && (n.edge = !0, n.version = a[
			1]), o && (n.weChat = !0), {
			browser: n,
			os: e,
			node: !1,
			canvasSupported: !!document.createElement("canvas").getContext,
			svgSupported: "undefined" != typeof SVGRect,
			touchEventsSupported: "ontouchstart" in window && !n.ie && !n.edge,
			pointerEventsSupported: "onpointerdown" in window && (n.edge || n.ie && n.version >= 11),
			domSupported: "undefined" != typeof document
		}
	}

	function n(t, e) {
		"createCanvas" === t && (bp = null), _p[t] = e
	}

	function i(t) {
		if (null == t || "object" != typeof t) return t;
		var e = t,
			n = fp.call(t);
		if ("[object Array]" === n) {
			if (!z(t)) {
				e = [];
				for (var r = 0, a = t.length; a > r; r++) e[r] = i(t[r])
			}
		} else if (dp[n]) {
			if (!z(t)) {
				var o = t.constructor;
				if (t.constructor.from) e = o.from(t);
				else {
					e = new o(t.length);
					for (var r = 0, a = t.length; a > r; r++) e[r] = i(t[r])
				}
			}
		} else if (!cp[n] && !z(t) && !T(t)) {
			e = {};
			for (var s in t) t.hasOwnProperty(s) && (e[s] = i(t[s]))
		}
		return e
	}

	function r(t, e, n) {
		if (!S(e) || !S(t)) return n ? i(e) : t;
		for (var a in e)
			if (e.hasOwnProperty(a)) {
				var o = t[a],
					s = e[a];
				!S(s) || !S(o) || _(s) || _(o) || T(s) || T(o) || M(s) || M(o) || z(s) || z(o) ? !n && a in t || (t[a] = i(e[a], !
					0)) : r(o, s, n)
			} return t
	}

	function a(t, e) {
		for (var n = t[0], i = 1, a = t.length; a > i; i++) n = r(n, t[i], e);
		return n
	}

	function o(t, e) {
		for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]);
		return t
	}

	function s(t, e, n) {
		for (var i in e) e.hasOwnProperty(i) && (n ? null != e[i] : null == t[i]) && (t[i] = e[i]);
		return t
	}

	function l() {
		return bp || (bp = wp().getContext("2d")), bp
	}

	function u(t, e) {
		if (t) {
			if (t.indexOf) return t.indexOf(e);
			for (var n = 0, i = t.length; i > n; n++)
				if (t[n] === e) return n
		}
		return -1
	}

	function h(t, e) {
		function n() {}
		var i = t.prototype;
		n.prototype = e.prototype, t.prototype = new n;
		for (var r in i) i.hasOwnProperty(r) && (t.prototype[r] = i[r]);
		t.prototype.constructor = t, t.superClass = e
	}

	function c(t, e, n) {
		t = "prototype" in t ? t.prototype : t, e = "prototype" in e ? e.prototype : e, s(t, e, n)
	}

	function d(t) {
		return t ? "string" == typeof t ? !1 : "number" == typeof t.length : void 0
	}

	function f(t, e, n) {
		if (t && e)
			if (t.forEach && t.forEach === gp) t.forEach(e, n);
			else if (t.length === +t.length)
			for (var i = 0, r = t.length; r > i; i++) e.call(n, t[i], i, t);
		else
			for (var a in t) t.hasOwnProperty(a) && e.call(n, t[a], a, t)
	}

	function p(t, e, n) {
		if (t && e) {
			if (t.map && t.map === yp) return t.map(e, n);
			for (var i = [], r = 0, a = t.length; a > r; r++) i.push(e.call(n, t[r], r, t));
			return i
		}
	}

	function g(t, e, n, i) {
		if (t && e) {
			if (t.reduce && t.reduce === xp) return t.reduce(e, n, i);
			for (var r = 0, a = t.length; a > r; r++) n = e.call(i, n, t[r], r, t);
			return n
		}
	}

	function v(t, e, n) {
		if (t && e) {
			if (t.filter && t.filter === vp) return t.filter(e, n);
			for (var i = [], r = 0, a = t.length; a > r; r++) e.call(n, t[r], r, t) && i.push(t[r]);
			return i
		}
	}

	function m(t, e, n) {
		if (t && e)
			for (var i = 0, r = t.length; r > i; i++)
				if (e.call(n, t[i], i, t)) return t[i]
	}

	function y(t, e) {
		var n = mp.call(arguments, 2);
		return function() {
			return t.apply(e, n.concat(mp.call(arguments)))
		}
	}

	function x(t) {
		var e = mp.call(arguments, 1);
		return function() {
			return t.apply(this, e.concat(mp.call(arguments)))
		}
	}

	function _(t) {
		return "[object Array]" === fp.call(t)
	}

	function w(t) {
		return "function" == typeof t
	}

	function b(t) {
		return "[object String]" === fp.call(t)
	}

	function S(t) {
		var e = typeof t;
		return "function" === e || !!t && "object" === e
	}

	function M(t) {
		return !!cp[fp.call(t)]
	}

	function I(t) {
		return !!dp[fp.call(t)]
	}

	function T(t) {
		return "object" == typeof t && "number" == typeof t.nodeType && "object" == typeof t.ownerDocument
	}

	function C(t) {
		return t !== t
	}

	function A() {
		for (var t = 0, e = arguments.length; e > t; t++)
			if (null != arguments[t]) return arguments[t]
	}

	function D(t, e) {
		return null != t ? t : e
	}

	function k(t, e, n) {
		return null != t ? t : null != e ? e : n
	}

	function P() {
		return Function.call.apply(mp, arguments)
	}

	function L(t) {
		if ("number" == typeof t) return [t, t, t, t];
		var e = t.length;
		return 2 === e ? [t[0], t[1], t[0], t[1]] : 3 === e ? [t[0], t[1], t[2], t[1]] : t
	}

	function O(t, e) {
		if (!t) throw new Error(e)
	}

	function E(t) {
		return null == t ? null : "function" == typeof t.trim ? t.trim() : t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
			"")
	}

	function B(t) {
		t[Sp] = !0
	}

	function z(t) {
		return t[Sp]
	}

	function R(t) {
		function e(t, e) {
			n ? i.set(t, e) : i.set(e, t)
		}
		var n = _(t);
		this.data = {};
		var i = this;
		t instanceof R ? t.each(e) : t && f(t, e)
	}

	function N(t) {
		return new R(t)
	}

	function F(t, e) {
		for (var n = new t.constructor(t.length + e.length), i = 0; i < t.length; i++) n[i] = t[i];
		var r = t.length;
		for (i = 0; i < e.length; i++) n[i + r] = e[i];
		return n
	}

	function V() {}

	function H(t, e) {
		var n = new Ip(2);
		return null == t && (t = 0), null == e && (e = 0), n[0] = t, n[1] = e, n
	}

	function G(t, e) {
		return t[0] = e[0], t[1] = e[1], t
	}

	function W(t) {
		var e = new Ip(2);
		return e[0] = t[0], e[1] = t[1], e
	}

	function X(t, e, n) {
		return t[0] = e, t[1] = n, t
	}

	function U(t, e, n) {
		return t[0] = e[0] + n[0], t[1] = e[1] + n[1], t
	}

	function Y(t, e, n, i) {
		return t[0] = e[0] + n[0] * i, t[1] = e[1] + n[1] * i, t
	}

	function q(t, e, n) {
		return t[0] = e[0] - n[0], t[1] = e[1] - n[1], t
	}

	function j(t) {
		return Math.sqrt(Z(t))
	}

	function Z(t) {
		return t[0] * t[0] + t[1] * t[1]
	}

	function K(t, e, n) {
		return t[0] = e[0] * n[0], t[1] = e[1] * n[1], t
	}

	function $(t, e, n) {
		return t[0] = e[0] / n[0], t[1] = e[1] / n[1], t
	}

	function Q(t, e) {
		return t[0] * e[0] + t[1] * e[1]
	}

	function J(t, e, n) {
		return t[0] = e[0] * n, t[1] = e[1] * n, t
	}

	function te(t, e) {
		var n = j(e);
		return 0 === n ? (t[0] = 0, t[1] = 0) : (t[0] = e[0] / n, t[1] = e[1] / n), t
	}

	function ee(t, e) {
		return Math.sqrt((t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]))
	}

	function ne(t, e) {
		return (t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1])
	}

	function ie(t, e) {
		return t[0] = -e[0], t[1] = -e[1], t
	}

	function re(t, e, n, i) {
		return t[0] = e[0] + i * (n[0] - e[0]), t[1] = e[1] + i * (n[1] - e[1]), t
	}

	function ae(t, e, n) {
		var i = e[0],
			r = e[1];
		return t[0] = n[0] * i + n[2] * r + n[4], t[1] = n[1] * i + n[3] * r + n[5], t
	}

	function oe(t, e, n) {
		return t[0] = Math.min(e[0], n[0]), t[1] = Math.min(e[1], n[1]), t
	}

	function se(t, e, n) {
		return t[0] = Math.max(e[0], n[0]), t[1] = Math.max(e[1], n[1]), t
	}

	function le() {
		this.on("mousedown", this._dragStart, this), this.on("mousemove", this._drag, this), this.on("mouseup", this._dragEnd,
			this)
	}

	function ue(t, e) {
		return {
			target: t,
			topTarget: e && e.topTarget
		}
	}

	function he(t, e) {
		var n = t._$eventProcessor;
		return null != e && n && n.normalizeQuery && (e = n.normalizeQuery(e)), e
	}

	function ce(t, e, n, i, r, a) {
		var o = t._$handlers;
		if ("function" == typeof n && (r = i, i = n, n = null), !i || !e) return t;
		n = he(t, n), o[e] || (o[e] = []);
		for (var s = 0; s < o[e].length; s++)
			if (o[e][s].h === i) return t;
		var l = {
				h: i,
				one: a,
				query: n,
				ctx: r || t,
				callAtLast: i.zrEventfulCallAtLast
			},
			u = o[e].length - 1,
			h = o[e][u];
		return h && h.callAtLast ? o[e].splice(u, 0, l) : o[e].push(l), t
	}

	function de(t, e, n, i, r, a) {
		var o = i + "-" + r,
			s = t.length;
		if (a.hasOwnProperty(o)) return a[o];
		if (1 === e) {
			var l = Math.round(Math.log((1 << s) - 1 & ~r) / Op);
			return t[n][l]
		}
		for (var u = i | 1 << n, h = n + 1; i & 1 << h;) h++;
		for (var c = 0, d = 0, f = 0; s > d; d++) {
			var p = 1 << d;
			p & r || (c += (f % 2 ? -1 : 1) * t[n][d] * de(t, e - 1, h, u, r | p, a), f++)
		}
		return a[o] = c, c
	}

	function fe(t, e) {
		var n = [
				[t[0], t[1], 1, 0, 0, 0, -e[0] * t[0], -e[0] * t[1]],
				[0, 0, 0, t[0], t[1], 1, -e[1] * t[0], -e[1] * t[1]],
				[t[2], t[3], 1, 0, 0, 0, -e[2] * t[2], -e[2] * t[3]],
				[0, 0, 0, t[2], t[3], 1, -e[3] * t[2], -e[3] * t[3]],
				[t[4], t[5], 1, 0, 0, 0, -e[4] * t[4], -e[4] * t[5]],
				[0, 0, 0, t[4], t[5], 1, -e[5] * t[4], -e[5] * t[5]],
				[t[6], t[7], 1, 0, 0, 0, -e[6] * t[6], -e[6] * t[7]],
				[0, 0, 0, t[6], t[7], 1, -e[7] * t[6], -e[7] * t[7]]
			],
			i = {},
			r = de(n, 8, 0, 0, 0, i);
		if (0 !== r) {
			for (var a = [], o = 0; 8 > o; o++)
				for (var s = 0; 8 > s; s++) null == a[s] && (a[s] = 0), a[s] += ((o + s) % 2 ? -1 : 1) * de(n, 7, 0 === o ? 1 : 0,
					1 << o, 1 << s, i) / r * e[o];
			return function(t, e, n) {
				var i = e * a[6] + n * a[7] + 1;
				t[0] = (e * a[0] + n * a[1] + a[2]) / i, t[1] = (e * a[3] + n * a[4] + a[5]) / i
			}
		}
	}

	function pe(t, e, n, i, r) {
		return ge(Bp, e, i, r, !0) && ge(t, n, Bp[0], Bp[1])
	}

	function ge(t, e, n, i, r) {
		if (e.getBoundingClientRect && hp.domSupported && !ye(e)) {
			var a = e[Ep] || (e[Ep] = {}),
				o = ve(e, a),
				s = me(o, a, r);
			if (s) return s(t, n, i), !0
		}
		return !1
	}

	function ve(t, e) {
		var n = e.markers;
		if (n) return n;
		n = e.markers = [];
		for (var i = ["left", "right"], r = ["top", "bottom"], a = 0; 4 > a; a++) {
			var o = document.createElement("div"),
				s = o.style,
				l = a % 2,
				u = (a >> 1) % 2;
			s.cssText = ["position: absolute", "visibility: hidden", "padding: 0", "margin: 0", "border-width: 0",
				"user-select: none", "width:0", "height:0", i[l] + ":0", r[u] + ":0", i[1 - l] + ":auto", r[1 - u] + ":auto", ""
			].join("!important;"), t.appendChild(o), n.push(o)
		}
		return n
	}

	function me(t, e, n) {
		for (var i = n ? "invTrans" : "trans", r = e[i], a = e.srcCoords, o = !0, s = [], l = [], u = 0; 4 > u; u++) {
			var h = t[u].getBoundingClientRect(),
				c = 2 * u,
				d = h.left,
				f = h.top;
			s.push(d, f), o = o && a && d === a[c] && f === a[c + 1], l.push(t[u].offsetLeft, t[u].offsetTop)
		}
		return o && r ? r : (e.srcCoords = s, e[i] = n ? fe(l, s) : fe(s, l))
	}

	function ye(t) {
		return "CANVAS" === t.nodeName.toUpperCase()
	}

	function xe(t, e, n, i) {
		return n = n || {}, i || !hp.canvasSupported ? _e(t, e, n) : hp.browser.firefox && null != e.layerX && e.layerX !==
			e.offsetX ? (n.zrX = e.layerX, n.zrY = e.layerY) : null != e.offsetX ? (n.zrX = e.offsetX, n.zrY = e.offsetY) : _e(
				t, e, n), n
	}

	function _e(t, e, n) {
		if (hp.domSupported && t.getBoundingClientRect) {
			var i = e.clientX,
				r = e.clientY;
			if (ye(t)) {
				var a = t.getBoundingClientRect();
				return n.zrX = i - a.left, void(n.zrY = r - a.top)
			}
			if (ge(Np, t, i, r)) return n.zrX = Np[0], void(n.zrY = Np[1])
		}
		n.zrX = n.zrY = 0
	}

	function we(t) {
		return t || window.event
	}

	function be(t, e, n) {
		if (e = we(e), null != e.zrX) return e;
		var i = e.type,
			r = i && i.indexOf("touch") >= 0;
		if (r) {
			var a = "touchend" !== i ? e.targetTouches[0] : e.changedTouches[0];
			a && xe(t, a, e, n)
		} else xe(t, e, e, n), e.zrDelta = e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3;
		var o = e.button;
		return null == e.which && void 0 !== o && Rp.test(e.type) && (e.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0), e
	}

	function Se(t, e, n, i) {
		zp ? t.addEventListener(e, n, i) : t.attachEvent("on" + e, n)
	}

	function Me(t, e, n, i) {
		zp ? t.removeEventListener(e, n, i) : t.detachEvent("on" + e, n)
	}

	function Ie(t) {
		var e = t[1][0] - t[0][0],
			n = t[1][1] - t[0][1];
		return Math.sqrt(e * e + n * n)
	}

	function Te(t) {
		return [(t[0][0] + t[1][0]) / 2, (t[0][1] + t[1][1]) / 2]
	}

	function Ce(t, e, n) {
		return {
			type: t,
			event: n,
			target: e.target,
			topTarget: e.topTarget,
			cancelBubble: !1,
			offsetX: n.zrX,
			offsetY: n.zrY,
			gestureEvent: n.gestureEvent,
			pinchX: n.pinchX,
			pinchY: n.pinchY,
			pinchScale: n.pinchScale,
			wheelDelta: n.zrDelta,
			zrByTouch: n.zrByTouch,
			which: n.which,
			stop: Ae
		}
	}

	function Ae() {
		Fp(this.event)
	}

	function De() {}

	function ke(t, e, n) {
		if (t[t.rectHover ? "rectContain" : "contain"](e, n)) {
			for (var i, r = t; r;) {
				if (r.clipPath && !r.clipPath.contain(e, n)) return !1;
				r.silent && (i = !0), r = r.parent
			}
			return i ? Gp : !0
		}
		return !1
	}

	function Pe(t, e, n) {
		var i = t.painter;
		return 0 > e || e > i.getWidth() || 0 > n || n > i.getHeight()
	}

	function Le() {
		var t = new Up(6);
		return Oe(t), t
	}

	function Oe(t) {
		return t[0] = 1, t[1] = 0, t[2] = 0, t[3] = 1, t[4] = 0, t[5] = 0, t
	}

	function Ee(t, e) {
		return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t
	}

	function Be(t, e, n) {
		var i = e[0] * n[0] + e[2] * n[1],
			r = e[1] * n[0] + e[3] * n[1],
			a = e[0] * n[2] + e[2] * n[3],
			o = e[1] * n[2] + e[3] * n[3],
			s = e[0] * n[4] + e[2] * n[5] + e[4],
			l = e[1] * n[4] + e[3] * n[5] + e[5];
		return t[0] = i, t[1] = r, t[2] = a, t[3] = o, t[4] = s, t[5] = l, t
	}

	function ze(t, e, n) {
		return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4] + n[0], t[5] = e[5] + n[1], t
	}

	function Re(t, e, n) {
		var i = e[0],
			r = e[2],
			a = e[4],
			o = e[1],
			s = e[3],
			l = e[5],
			u = Math.sin(n),
			h = Math.cos(n);
		return t[0] = i * h + o * u, t[1] = -i * u + o * h, t[2] = r * h + s * u, t[3] = -r * u + h * s, t[4] = h * a + u *
			l, t[5] = h * l - u * a, t
	}

	function Ne(t, e, n) {
		var i = n[0],
			r = n[1];
		return t[0] = e[0] * i, t[1] = e[1] * r, t[2] = e[2] * i, t[3] = e[3] * r, t[4] = e[4] * i, t[5] = e[5] * r, t
	}

	function Fe(t, e) {
		var n = e[0],
			i = e[2],
			r = e[4],
			a = e[1],
			o = e[3],
			s = e[5],
			l = n * o - a * i;
		return l ? (l = 1 / l, t[0] = o * l, t[1] = -a * l, t[2] = -i * l, t[3] = n * l, t[4] = (i * s - o * r) * l, t[5] =
			(a * r - n * s) * l, t) : null
	}

	function Ve(t) {
		var e = Le();
		return Ee(e, t), e
	}

	function He(t) {
		return t > jp || -jp > t
	}

	function Ge(t) {
		this._target = t.target, this._life = t.life || 1e3, this._delay = t.delay || 0, this._initialized = !1, this.loop =
			null == t.loop ? !1 : t.loop, this.gap = t.gap || 0, this.easing = t.easing || "Linear", this.onframe = t.onframe,
			this.ondestroy = t.ondestroy, this.onrestart = t.onrestart, this._pausedTime = 0, this._paused = !1
	}

	function We(t) {
		return t = Math.round(t), 0 > t ? 0 : t > 255 ? 255 : t
	}

	function Xe(t) {
		return t = Math.round(t), 0 > t ? 0 : t > 360 ? 360 : t
	}

	function Ue(t) {
		return 0 > t ? 0 : t > 1 ? 1 : t
	}

	function Ye(t) {
		return We(t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 * 255 : parseInt(t, 10))
	}

	function qe(t) {
		return Ue(t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 : parseFloat(t))
	}

	function je(t, e, n) {
		return 0 > n ? n += 1 : n > 1 && (n -= 1), 1 > 6 * n ? t + (e - t) * n * 6 : 1 > 2 * n ? e : 2 > 3 * n ? t + (e - t) *
			(2 / 3 - n) * 6 : t
	}

	function Ze(t, e, n) {
		return t + (e - t) * n
	}

	function Ke(t, e, n, i, r) {
		return t[0] = e, t[1] = n, t[2] = i, t[3] = r, t
	}

	function $e(t, e) {
		return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t
	}

	function Qe(t, e) {
		lg && $e(lg, e), lg = sg.put(t, lg || e.slice())
	}

	function Je(t, e) {
		if (t) {
			e = e || [];
			var n = sg.get(t);
			if (n) return $e(e, n);
			t += "";
			var i = t.replace(/ /g, "").toLowerCase();
			if (i in og) return $e(e, og[i]), Qe(t, e), e;
			if ("#" !== i.charAt(0)) {
				var r = i.indexOf("("),
					a = i.indexOf(")");
				if (-1 !== r && a + 1 === i.length) {
					var o = i.substr(0, r),
						s = i.substr(r + 1, a - (r + 1)).split(","),
						l = 1;
					switch (o) {
						case "rgba":
							if (4 !== s.length) return void Ke(e, 0, 0, 0, 1);
							l = qe(s.pop());
						case "rgb":
							return 3 !== s.length ? void Ke(e, 0, 0, 0, 1) : (Ke(e, Ye(s[0]), Ye(s[1]), Ye(s[2]), l), Qe(t, e), e);
						case "hsla":
							return 4 !== s.length ? void Ke(e, 0, 0, 0, 1) : (s[3] = qe(s[3]), tn(s, e), Qe(t, e), e);
						case "hsl":
							return 3 !== s.length ? void Ke(e, 0, 0, 0, 1) : (tn(s, e), Qe(t, e), e);
						default:
							return
					}
				}
				Ke(e, 0, 0, 0, 1)
			} else {
				if (4 === i.length) {
					var u = parseInt(i.substr(1), 16);
					return u >= 0 && 4095 >= u ? (Ke(e, (3840 & u) >> 4 | (3840 & u) >> 8, 240 & u | (240 & u) >> 4, 15 & u | (15 & u) <<
						4, 1), Qe(t, e), e) : void Ke(e, 0, 0, 0, 1)
				}
				if (7 === i.length) {
					var u = parseInt(i.substr(1), 16);
					return u >= 0 && 16777215 >= u ? (Ke(e, (16711680 & u) >> 16, (65280 & u) >> 8, 255 & u, 1), Qe(t, e), e) : void Ke(
						e, 0, 0, 0, 1)
				}
			}
		}
	}

	function tn(t, e) {
		var n = (parseFloat(t[0]) % 360 + 360) % 360 / 360,
			i = qe(t[1]),
			r = qe(t[2]),
			a = .5 >= r ? r * (i + 1) : r + i - r * i,
			o = 2 * r - a;
		return e = e || [], Ke(e, We(255 * je(o, a, n + 1 / 3)), We(255 * je(o, a, n)), We(255 * je(o, a, n - 1 / 3)), 1), 4 ===
			t.length && (e[3] = t[3]), e
	}

	function en(t) {
		if (t) {
			var e, n, i = t[0] / 255,
				r = t[1] / 255,
				a = t[2] / 255,
				o = Math.min(i, r, a),
				s = Math.max(i, r, a),
				l = s - o,
				u = (s + o) / 2;
			if (0 === l) e = 0, n = 0;
			else {
				n = .5 > u ? l / (s + o) : l / (2 - s - o);
				var h = ((s - i) / 6 + l / 2) / l,
					c = ((s - r) / 6 + l / 2) / l,
					d = ((s - a) / 6 + l / 2) / l;
				i === s ? e = d - c : r === s ? e = 1 / 3 + h - d : a === s && (e = 2 / 3 + c - h), 0 > e && (e += 1), e > 1 && (e -=
					1)
			}
			var f = [360 * e, n, u];
			return null != t[3] && f.push(t[3]), f
		}
	}

	function nn(t, e) {
		var n = Je(t);
		if (n) {
			for (var i = 0; 3 > i; i++) n[i] = 0 > e ? n[i] * (1 - e) | 0 : (255 - n[i]) * e + n[i] | 0, n[i] > 255 ? n[i] =
				255 : t[i] < 0 && (n[i] = 0);
			return un(n, 4 === n.length ? "rgba" : "rgb")
		}
	}

	function rn(t) {
		var e = Je(t);
		return e ? ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1) : void 0
	}

	function an(t, e, n) {
		if (e && e.length && t >= 0 && 1 >= t) {
			n = n || [];
			var i = t * (e.length - 1),
				r = Math.floor(i),
				a = Math.ceil(i),
				o = e[r],
				s = e[a],
				l = i - r;
			return n[0] = We(Ze(o[0], s[0], l)), n[1] = We(Ze(o[1], s[1], l)), n[2] = We(Ze(o[2], s[2], l)), n[3] = Ue(Ze(o[3],
				s[3], l)), n
		}
	}

	function on(t, e, n) {
		if (e && e.length && t >= 0 && 1 >= t) {
			var i = t * (e.length - 1),
				r = Math.floor(i),
				a = Math.ceil(i),
				o = Je(e[r]),
				s = Je(e[a]),
				l = i - r,
				u = un([We(Ze(o[0], s[0], l)), We(Ze(o[1], s[1], l)), We(Ze(o[2], s[2], l)), Ue(Ze(o[3], s[3], l))], "rgba");
			return n ? {
				color: u,
				leftIndex: r,
				rightIndex: a,
				value: i
			} : u
		}
	}

	function sn(t, e, n, i) {
		return t = Je(t), t ? (t = en(t), null != e && (t[0] = Xe(e)), null != n && (t[1] = qe(n)), null != i && (t[2] = qe(
			i)), un(tn(t), "rgba")) : void 0
	}

	function ln(t, e) {
		return t = Je(t), t && null != e ? (t[3] = Ue(e), un(t, "rgba")) : void 0
	}

	function un(t, e) {
		if (t && t.length) {
			var n = t[0] + "," + t[1] + "," + t[2];
			return ("rgba" === e || "hsva" === e || "hsla" === e) && (n += "," + t[3]), e + "(" + n + ")"
		}
	}

	function hn(t, e) {
		return t[e]
	}

	function cn(t, e, n) {
		t[e] = n
	}

	function dn(t, e, n) {
		return (e - t) * n + t
	}

	function fn(t, e, n) {
		return n > .5 ? e : t
	}

	function pn(t, e, n, i, r) {
		var a = t.length;
		if (1 === r)
			for (var o = 0; a > o; o++) i[o] = dn(t[o], e[o], n);
		else
			for (var s = a && t[0].length, o = 0; a > o; o++)
				for (var l = 0; s > l; l++) i[o][l] = dn(t[o][l], e[o][l], n)
	}

	function gn(t, e, n) {
		var i = t.length,
			r = e.length;
		if (i !== r) {
			var a = i > r;
			if (a) t.length = r;
			else
				for (var o = i; r > o; o++) t.push(1 === n ? e[o] : dg.call(e[o]))
		}
		for (var s = t[0] && t[0].length, o = 0; o < t.length; o++)
			if (1 === n) isNaN(t[o]) && (t[o] = e[o]);
			else
				for (var l = 0; s > l; l++) isNaN(t[o][l]) && (t[o][l] = e[o][l])
	}

	function vn(t, e, n) {
		if (t === e) return !0;
		var i = t.length;
		if (i !== e.length) return !1;
		if (1 === n) {
			for (var r = 0; i > r; r++)
				if (t[r] !== e[r]) return !1
		} else
			for (var a = t[0].length, r = 0; i > r; r++)
				for (var o = 0; a > o; o++)
					if (t[r][o] !== e[r][o]) return !1;
		return !0
	}

	function mn(t, e, n, i, r, a, o, s, l) {
		var u = t.length;
		if (1 === l)
			for (var h = 0; u > h; h++) s[h] = yn(t[h], e[h], n[h], i[h], r, a, o);
		else
			for (var c = t[0].length, h = 0; u > h; h++)
				for (var d = 0; c > d; d++) s[h][d] = yn(t[h][d], e[h][d], n[h][d], i[h][d], r, a, o)
	}

	function yn(t, e, n, i, r, a, o) {
		var s = .5 * (n - t),
			l = .5 * (i - e);
		return (2 * (e - n) + s + l) * o + (-3 * (e - n) - 2 * s - l) * a + s * r + e
	}

	function xn(t) {
		if (d(t)) {
			var e = t.length;
			if (d(t[0])) {
				for (var n = [], i = 0; e > i; i++) n.push(dg.call(t[i]));
				return n
			}
			return dg.call(t)
		}
		return t
	}

	function _n(t) {
		return t[0] = Math.floor(t[0]), t[1] = Math.floor(t[1]), t[2] = Math.floor(t[2]), "rgba(" + t.join(",") + ")"
	}

	function wn(t) {
		var e = t[t.length - 1].value;
		return d(e && e[0]) ? 2 : 1
	}

	function bn(t, e, n, i, r, a) {
		var o = t._getter,
			s = t._setter,
			l = "spline" === e,
			u = i.length;
		if (u) {
			var h, c = i[0].value,
				f = d(c),
				p = !1,
				g = !1,
				v = f ? wn(i) : 0;
			i.sort(function(t, e) {
				return t.time - e.time
			}), h = i[u - 1].time;
			for (var m = [], y = [], x = i[0].value, _ = !0, w = 0; u > w; w++) {
				m.push(i[w].time / h);
				var b = i[w].value;
				if (f && vn(b, x, v) || !f && b === x || (_ = !1), x = b, "string" == typeof b) {
					var S = Je(b);
					S ? (b = S, p = !0) : g = !0
				}
				y.push(b)
			}
			if (a || !_) {
				for (var M = y[u - 1], w = 0; u - 1 > w; w++) f ? gn(y[w], M, v) : !isNaN(y[w]) || isNaN(M) || g || p || (y[w] = M);
				f && gn(o(t._target, r), M, v);
				var I, T, C, A, D, k, P = 0,
					L = 0;
				if (p) var O = [0, 0, 0, 0];
				var E = function(t, e) {
						var n;
						if (0 > e) n = 0;
						else if (L > e) {
							for (I = Math.min(P + 1, u - 1), n = I; n >= 0 && !(m[n] <= e); n--);
							n = Math.min(n, u - 2)
						} else {
							for (n = P; u > n && !(m[n] > e); n++);
							n = Math.min(n - 1, u - 2)
						}
						P = n, L = e;
						var i = m[n + 1] - m[n];
						if (0 !== i)
							if (T = (e - m[n]) / i, l)
								if (A = y[n], C = y[0 === n ? n : n - 1], D = y[n > u - 2 ? u - 1 : n + 1], k = y[n > u - 3 ? u - 1 : n + 2],
									f) mn(C, A, D, k, T, T * T, T * T * T, o(t, r), v);
								else {
									var a;
									if (p) a = mn(C, A, D, k, T, T * T, T * T * T, O, 1), a = _n(O);
									else {
										if (g) return fn(A, D, T);
										a = yn(C, A, D, k, T, T * T, T * T * T)
									}
									s(t, r, a)
								}
						else if (f) pn(y[n], y[n + 1], T, o(t, r), v);
						else {
							var a;
							if (p) pn(y[n], y[n + 1], T, O, 1), a = _n(O);
							else {
								if (g) return fn(y[n], y[n + 1], T);
								a = dn(y[n], y[n + 1], T)
							}
							s(t, r, a)
						}
					},
					B = new Ge({
						target: t._target,
						life: h,
						loop: t._loop,
						delay: t._delay,
						onframe: E,
						ondestroy: n
					});
				return e && "spline" !== e && (B.easing = e), B
			}
		}
	}

	function Sn(t, e, n, i, r, a, o, s) {
		function l() {
			h--, h || a && a()
		}
		b(i) ? (a = r, r = i, i = 0) : w(r) ? (a = r, r = "linear", i = 0) : w(i) ? (a = i, i = 0) : w(n) ? (a = n, n = 500) :
			n || (n = 500), t.stopAnimation(), Mn(t, "", t, e, n, i, s);
		var u = t.animators.slice(),
			h = u.length;
		h || a && a();
		for (var c = 0; c < u.length; c++) u[c].done(l).start(r, o)
	}

	function Mn(t, e, n, i, r, a, o) {
		var s = {},
			l = 0;
		for (var u in i) i.hasOwnProperty(u) && (null != n[u] ? S(i[u]) && !d(i[u]) ? Mn(t, e ? e + "." + u : u, n[u], i[u],
			r, a, o) : (o ? (s[u] = n[u], In(t, e, u, i[u])) : s[u] = i[u], l++) : null == i[u] || o || In(t, e, u, i[u]));
		l > 0 && t.animate(e, !1).when(null == r ? 500 : r, s).delay(a || 0)
	}

	function In(t, e, n, i) {
		if (e) {
			var r = {};
			r[e] = {}, r[e][n] = i, t.attr(r)
		} else t.attr(n, i)
	}

	function Tn(t, e, n, i) {
		0 > n && (t += n, n = -n), 0 > i && (e += i, i = -i), this.x = t, this.y = e, this.width = n, this.height = i
	}

	function Cn(t) {
		for (var e = 0; t >= Ig;) e |= 1 & t, t >>= 1;
		return t + e
	}

	function An(t, e, n, i) {
		var r = e + 1;
		if (r === n) return 1;
		if (i(t[r++], t[e]) < 0) {
			for (; n > r && i(t[r], t[r - 1]) < 0;) r++;
			Dn(t, e, r)
		} else
			for (; n > r && i(t[r], t[r - 1]) >= 0;) r++;
		return r - e
	}

	function Dn(t, e, n) {
		for (n--; n > e;) {
			var i = t[e];
			t[e++] = t[n], t[n--] = i
		}
	}

	function kn(t, e, n, i, r) {
		for (i === e && i++; n > i; i++) {
			for (var a, o = t[i], s = e, l = i; l > s;) a = s + l >>> 1, r(o, t[a]) < 0 ? l = a : s = a + 1;
			var u = i - s;
			switch (u) {
				case 3:
					t[s + 3] = t[s + 2];
				case 2:
					t[s + 2] = t[s + 1];
				case 1:
					t[s + 1] = t[s];
					break;
				default:
					for (; u > 0;) t[s + u] = t[s + u - 1], u--
			}
			t[s] = o
		}
	}

	function Pn(t, e, n, i, r, a) {
		var o = 0,
			s = 0,
			l = 1;
		if (a(t, e[n + r]) > 0) {
			for (s = i - r; s > l && a(t, e[n + r + l]) > 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s);
			l > s && (l = s), o += r, l += r
		} else {
			for (s = r + 1; s > l && a(t, e[n + r - l]) <= 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s);
			l > s && (l = s);
			var u = o;
			o = r - l, l = r - u
		}
		for (o++; l > o;) {
			var h = o + (l - o >>> 1);
			a(t, e[n + h]) > 0 ? o = h + 1 : l = h
		}
		return l
	}

	function Ln(t, e, n, i, r, a) {
		var o = 0,
			s = 0,
			l = 1;
		if (a(t, e[n + r]) < 0) {
			for (s = r + 1; s > l && a(t, e[n + r - l]) < 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s);
			l > s && (l = s);
			var u = o;
			o = r - l, l = r - u
		} else {
			for (s = i - r; s > l && a(t, e[n + r + l]) >= 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s);
			l > s && (l = s), o += r, l += r
		}
		for (o++; l > o;) {
			var h = o + (l - o >>> 1);
			a(t, e[n + h]) < 0 ? l = h : o = h + 1
		}
		return l
	}

	function On(t, e) {
		function n(t, e) {
			l[c] = t, u[c] = e, c += 1
		}

		function i() {
			for (; c > 1;) {
				var t = c - 2;
				if (t >= 1 && u[t - 1] <= u[t] + u[t + 1] || t >= 2 && u[t - 2] <= u[t] + u[t - 1]) u[t - 1] < u[t + 1] && t--;
				else if (u[t] > u[t + 1]) break;
				a(t)
			}
		}

		function r() {
			for (; c > 1;) {
				var t = c - 2;
				t > 0 && u[t - 1] < u[t + 1] && t--, a(t)
			}
		}

		function a(n) {
			var i = l[n],
				r = u[n],
				a = l[n + 1],
				h = u[n + 1];
			u[n] = r + h, n === c - 3 && (l[n + 1] = l[n + 2], u[n + 1] = u[n + 2]), c--;
			var d = Ln(t[a], t, i, r, 0, e);
			i += d, r -= d, 0 !== r && (h = Pn(t[i + r - 1], t, a, h, h - 1, e), 0 !== h && (h >= r ? o(i, r, a, h) : s(i, r, a,
				h)))
		}

		function o(n, i, r, a) {
			var o = 0;
			for (o = 0; i > o; o++) d[o] = t[n + o];
			var s = 0,
				l = r,
				u = n;
			if (t[u++] = t[l++], 0 !== --a) {
				if (1 === i) {
					for (o = 0; a > o; o++) t[u + o] = t[l + o];
					return void(t[u + a] = d[s])
				}
				for (var c, f, p, g = h;;) {
					c = 0, f = 0, p = !1;
					do
						if (e(t[l], d[s]) < 0) {
							if (t[u++] = t[l++], f++, c = 0, 0 === --a) {
								p = !0;
								break
							}
						} else if (t[u++] = d[s++], c++, f = 0, 1 === --i) {
						p = !0;
						break
					} while (g > (c | f));
					if (p) break;
					do {
						if (c = Ln(t[l], d, s, i, 0, e), 0 !== c) {
							for (o = 0; c > o; o++) t[u + o] = d[s + o];
							if (u += c, s += c, i -= c, 1 >= i) {
								p = !0;
								break
							}
						}
						if (t[u++] = t[l++], 0 === --a) {
							p = !0;
							break
						}
						if (f = Pn(d[s], t, l, a, 0, e), 0 !== f) {
							for (o = 0; f > o; o++) t[u + o] = t[l + o];
							if (u += f, l += f, a -= f, 0 === a) {
								p = !0;
								break
							}
						}
						if (t[u++] = d[s++], 1 === --i) {
							p = !0;
							break
						}
						g--
					} while (c >= Tg || f >= Tg);
					if (p) break;
					0 > g && (g = 0), g += 2
				}
				if (h = g, 1 > h && (h = 1), 1 === i) {
					for (o = 0; a > o; o++) t[u + o] = t[l + o];
					t[u + a] = d[s]
				} else {
					if (0 === i) throw new Error;
					for (o = 0; i > o; o++) t[u + o] = d[s + o]
				}
			} else
				for (o = 0; i > o; o++) t[u + o] = d[s + o]
		}

		function s(n, i, r, a) {
			var o = 0;
			for (o = 0; a > o; o++) d[o] = t[r + o];
			var s = n + i - 1,
				l = a - 1,
				u = r + a - 1,
				c = 0,
				f = 0;
			if (t[u--] = t[s--], 0 !== --i) {
				if (1 === a) {
					for (u -= i, s -= i, f = u + 1, c = s + 1, o = i - 1; o >= 0; o--) t[f + o] = t[c + o];
					return void(t[u] = d[l])
				}
				for (var p = h;;) {
					var g = 0,
						v = 0,
						m = !1;
					do
						if (e(d[l], t[s]) < 0) {
							if (t[u--] = t[s--], g++, v = 0, 0 === --i) {
								m = !0;
								break
							}
						} else if (t[u--] = d[l--], v++, g = 0, 1 === --a) {
						m = !0;
						break
					} while (p > (g | v));
					if (m) break;
					do {
						if (g = i - Ln(d[l], t, n, i, i - 1, e), 0 !== g) {
							for (u -= g, s -= g, i -= g, f = u + 1, c = s + 1, o = g - 1; o >= 0; o--) t[f + o] = t[c + o];
							if (0 === i) {
								m = !0;
								break
							}
						}
						if (t[u--] = d[l--], 1 === --a) {
							m = !0;
							break
						}
						if (v = a - Pn(t[s], d, 0, a, a - 1, e), 0 !== v) {
							for (u -= v, l -= v, a -= v, f = u + 1, c = l + 1, o = 0; v > o; o++) t[f + o] = d[c + o];
							if (1 >= a) {
								m = !0;
								break
							}
						}
						if (t[u--] = t[s--], 0 === --i) {
							m = !0;
							break
						}
						p--
					} while (g >= Tg || v >= Tg);
					if (m) break;
					0 > p && (p = 0), p += 2
				}
				if (h = p, 1 > h && (h = 1), 1 === a) {
					for (u -= i, s -= i, f = u + 1, c = s + 1, o = i - 1; o >= 0; o--) t[f + o] = t[c + o];
					t[u] = d[l]
				} else {
					if (0 === a) throw new Error;
					for (c = u - (a - 1), o = 0; a > o; o++) t[c + o] = d[o]
				}
			} else
				for (c = u - (a - 1), o = 0; a > o; o++) t[c + o] = d[o]
		}
		var l, u, h = Tg,
			c = 0,
			d = [];
		l = [], u = [], this.mergeRuns = i, this.forceMergeRuns = r, this.pushRun = n
	}

	function En(t, e, n, i) {
		n || (n = 0), i || (i = t.length);
		var r = i - n;
		if (!(2 > r)) {
			var a = 0;
			if (Ig > r) return a = An(t, n, i, e), void kn(t, n, i, n + a, e);
			var o = new On(t, e),
				s = Cn(r);
			do {
				if (a = An(t, n, i, e), s > a) {
					var l = r;
					l > s && (l = s), kn(t, n, n + l, n + a, e), a = l
				}
				o.pushRun(n, a), o.mergeRuns(), r -= a, n += a
			} while (0 !== r);
			o.forceMergeRuns()
		}
	}

	function Bn(t, e) {
		return t.zlevel === e.zlevel ? t.z === e.z ? t.z2 - e.z2 : t.z - e.z : t.zlevel - e.zlevel
	}

	function zn(t, e, n) {
		var i = null == e.x ? 0 : e.x,
			r = null == e.x2 ? 1 : e.x2,
			a = null == e.y ? 0 : e.y,
			o = null == e.y2 ? 0 : e.y2;
		e.global || (i = i * n.width + n.x, r = r * n.width + n.x, a = a * n.height + n.y, o = o * n.height + n.y), i =
			isNaN(i) ? 0 : i, r = isNaN(r) ? 1 : r, a = isNaN(a) ? 0 : a, o = isNaN(o) ? 0 : o;
		var s = t.createLinearGradient(i, a, r, o);
		return s
	}

	function Rn(t, e, n) {
		var i = n.width,
			r = n.height,
			a = Math.min(i, r),
			o = null == e.x ? .5 : e.x,
			s = null == e.y ? .5 : e.y,
			l = null == e.r ? .5 : e.r;
		e.global || (o = o * i + n.x, s = s * r + n.y, l *= a);
		var u = t.createRadialGradient(o, s, 0, o, s, l);
		return u
	}

	function Nn() {
		return !1
	}

	function Fn(t, e, n) {
		var i = wp(),
			r = e.getWidth(),
			a = e.getHeight(),
			o = i.style;
		return o && (o.position = "absolute", o.left = 0, o.top = 0, o.width = r + "px", o.height = a + "px", i.setAttribute(
			"data-zr-dom-id", t)), i.width = r * n, i.height = a * n, i
	}

	function Vn(t) {
		if ("string" == typeof t) {
			var e = Vg.get(t);
			return e && e.image
		}
		return t
	}

	function Hn(t, e, n, i, r) {
		if (t) {
			if ("string" == typeof t) {
				if (e && e.__zrImageSrc === t || !n) return e;
				var a = Vg.get(t),
					o = {
						hostEl: n,
						cb: i,
						cbPayload: r
					};
				return a ? (e = a.image, !Wn(e) && a.pending.push(o)) : (e = new Image, e.onload = e.onerror = Gn, Vg.put(t, e.__cachedImgObj = {
					image: e,
					pending: [o]
				}), e.src = e.__zrImageSrc = t), e
			}
			return t
		}
		return e
	}

	function Gn() {
		var t = this.__cachedImgObj;
		this.onload = this.onerror = this.__cachedImgObj = null;
		for (var e = 0; e < t.pending.length; e++) {
			var n = t.pending[e],
				i = n.cb;
			i && i(this, n.cbPayload), n.hostEl.dirty()
		}
		t.pending.length = 0
	}

	function Wn(t) {
		return t && t.width && t.height
	}

	function Xn(t, e) {
		e = e || Ug;
		var n = t + ":" + e;
		if (Hg[n]) return Hg[n];
		for (var i = (t + "").split("\n"), r = 0, a = 0, o = i.length; o > a; a++) r = Math.max(ni(i[a], e).width, r);
		return Gg > Wg && (Gg = 0, Hg = {}), Gg++, Hg[n] = r, r
	}

	function Un(t, e, n, i, r, a, o, s) {
		return o ? qn(t, e, n, i, r, a, o, s) : Yn(t, e, n, i, r, a, s)
	}

	function Yn(t, e, n, i, r, a, o) {
		var s = ii(t, e, r, a, o),
			l = Xn(t, e);
		r && (l += r[1] + r[3]);
		var u = s.outerHeight,
			h = jn(0, l, n),
			c = Zn(0, u, i),
			d = new Tn(h, c, l, u);
		return d.lineHeight = s.lineHeight, d
	}

	function qn(t, e, n, i, r, a, o, s) {
		var l = ri(t, {
				rich: o,
				truncate: s,
				font: e,
				textAlign: n,
				textPadding: r,
				textLineHeight: a
			}),
			u = l.outerWidth,
			h = l.outerHeight,
			c = jn(0, u, n),
			d = Zn(0, h, i);
		return new Tn(c, d, u, h)
	}

	function jn(t, e, n) {
		return "right" === n ? t -= e : "center" === n && (t -= e / 2), t
	}

	function Zn(t, e, n) {
		return "middle" === n ? t -= e / 2 : "bottom" === n && (t -= e), t
	}

	function Kn(t, e, n) {
		var i = e.textPosition,
			r = e.textDistance,
			a = n.x,
			o = n.y;
		r = r || 0;
		var s = n.height,
			l = n.width,
			u = s / 2,
			h = "left",
			c = "top";
		switch (i) {
			case "left":
				a -= r, o += u, h = "right", c = "middle";
				break;
			case "right":
				a += r + l, o += u, c = "middle";
				break;
			case "top":
				a += l / 2, o -= r, h = "center", c = "bottom";
				break;
			case "bottom":
				a += l / 2, o += s + r, h = "center";
				break;
			case "inside":
				a += l / 2, o += u, h = "center", c = "middle";
				break;
			case "insideLeft":
				a += r, o += u, c = "middle";
				break;
			case "insideRight":
				a += l - r, o += u, h = "right", c = "middle";
				break;
			case "insideTop":
				a += l / 2, o += r, h = "center";
				break;
			case "insideBottom":
				a += l / 2, o += s - r, h = "center", c = "bottom";
				break;
			case "insideTopLeft":
				a += r, o += r;
				break;
			case "insideTopRight":
				a += l - r, o += r, h = "right";
				break;
			case "insideBottomLeft":
				a += r, o += s - r, c = "bottom";
				break;
			case "insideBottomRight":
				a += l - r, o += s - r, h = "right", c = "bottom"
		}
		return t = t || {}, t.x = a, t.y = o, t.textAlign = h, t.textVerticalAlign = c, t
	}

	function $n(t, e, n, i, r) {
		if (!e) return "";
		var a = (t + "").split("\n");
		r = Qn(e, n, i, r);
		for (var o = 0, s = a.length; s > o; o++) a[o] = Jn(a[o], r);
		return a.join("\n")
	}

	function Qn(t, e, n, i) {
		i = o({}, i), i.font = e;
		var n = D(n, "...");
		i.maxIterations = D(i.maxIterations, 2);
		var r = i.minChar = D(i.minChar, 0);
		i.cnCharWidth = Xn("国", e);
		var a = i.ascCharWidth = Xn("a", e);
		i.placeholder = D(i.placeholder, "");
		for (var s = t = Math.max(0, t - 1), l = 0; r > l && s >= a; l++) s -= a;
		var u = Xn(n, e);
		return u > s && (n = "", u = 0), s = t - u, i.ellipsis = n, i.ellipsisWidth = u, i.contentWidth = s, i.containerWidth =
			t, i
	}

	function Jn(t, e) {
		var n = e.containerWidth,
			i = e.font,
			r = e.contentWidth;
		if (!n) return "";
		var a = Xn(t, i);
		if (n >= a) return t;
		for (var o = 0;; o++) {
			if (r >= a || o >= e.maxIterations) {
				t += e.ellipsis;
				break
			}
			var s = 0 === o ? ti(t, r, e.ascCharWidth, e.cnCharWidth) : a > 0 ? Math.floor(t.length * r / a) : 0;
			t = t.substr(0, s), a = Xn(t, i)
		}
		return "" === t && (t = e.placeholder), t
	}

	function ti(t, e, n, i) {
		for (var r = 0, a = 0, o = t.length; o > a && e > r; a++) {
			var s = t.charCodeAt(a);
			r += s >= 0 && 127 >= s ? n : i
		}
		return a
	}

	function ei(t) {
		return Xn("国", t)
	}

	function ni(t, e) {
		return Yg.measureText(t, e)
	}

	function ii(t, e, n, i, r) {
		null != t && (t += "");
		var a = D(i, ei(e)),
			o = t ? t.split("\n") : [],
			s = o.length * a,
			l = s,
			u = !0;
		if (n && (l += n[0] + n[2]), t && r) {
			u = !1;
			var h = r.outerHeight,
				c = r.outerWidth;
			if (null != h && l > h) t = "", o = [];
			else if (null != c)
				for (var d = Qn(c - (n ? n[1] + n[3] : 0), e, r.ellipsis, {
						minChar: r.minChar,
						placeholder: r.placeholder
					}), f = 0, p = o.length; p > f; f++) o[f] = Jn(o[f], d)
		}
		return {
			lines: o,
			height: s,
			outerHeight: l,
			lineHeight: a,
			canCacheByTextString: u
		}
	}

	function ri(t, e) {
		var n = {
			lines: [],
			width: 0,
			height: 0
		};
		if (null != t && (t += ""), !t) return n;
		for (var i, r = Xg.lastIndex = 0; null != (i = Xg.exec(t));) {
			var a = i.index;
			a > r && ai(n, t.substring(r, a)), ai(n, i[2], i[1]), r = Xg.lastIndex
		}
		r < t.length && ai(n, t.substring(r, t.length));
		var o = n.lines,
			s = 0,
			l = 0,
			u = [],
			h = e.textPadding,
			c = e.truncate,
			d = c && c.outerWidth,
			f = c && c.outerHeight;
		h && (null != d && (d -= h[1] + h[3]), null != f && (f -= h[0] + h[2]));
		for (var p = 0; p < o.length; p++) {
			for (var g = o[p], v = 0, m = 0, y = 0; y < g.tokens.length; y++) {
				var x = g.tokens[y],
					_ = x.styleName && e.rich[x.styleName] || {},
					w = x.textPadding = _.textPadding,
					b = x.font = _.font || e.font,
					S = x.textHeight = D(_.textHeight, ei(b));
				if (w && (S += w[0] + w[2]), x.height = S, x.lineHeight = k(_.textLineHeight, e.textLineHeight, S), x.textAlign =
					_ && _.textAlign || e.textAlign, x.textVerticalAlign = _ && _.textVerticalAlign || "middle", null != f && s + x.lineHeight >
					f) return {
					lines: [],
					width: 0,
					height: 0
				};
				x.textWidth = Xn(x.text, b);
				var M = _.textWidth,
					I = null == M || "auto" === M;
				if ("string" == typeof M && "%" === M.charAt(M.length - 1)) x.percentWidth = M, u.push(x), M = 0;
				else {
					if (I) {
						M = x.textWidth;
						var T = _.textBackgroundColor,
							C = T && T.image;
						C && (C = Vn(C), Wn(C) && (M = Math.max(M, C.width * S / C.height)))
					}
					var A = w ? w[1] + w[3] : 0;
					M += A;
					var P = null != d ? d - m : null;
					null != P && M > P && (!I || A > P ? (x.text = "", x.textWidth = M = 0) : (x.text = $n(x.text, P - A, b, c.ellipsis, {
						minChar: c.minChar
					}), x.textWidth = Xn(x.text, b), M = x.textWidth + A))
				}
				m += x.width = M, _ && (v = Math.max(v, x.lineHeight))
			}
			g.width = m, g.lineHeight = v, s += v, l = Math.max(l, m)
		}
		n.outerWidth = n.width = D(e.textWidth, l), n.outerHeight = n.height = D(e.textHeight, s), h && (n.outerWidth += h[1] +
			h[3], n.outerHeight += h[0] + h[2]);
		for (var p = 0; p < u.length; p++) {
			var x = u[p],
				L = x.percentWidth;
			x.width = parseInt(L, 10) / 100 * l
		}
		return n
	}

	function ai(t, e, n) {
		for (var i = "" === e, r = e.split("\n"), a = t.lines, o = 0; o < r.length; o++) {
			var s = r[o],
				l = {
					styleName: n,
					text: s,
					isLineHolder: !s && !i
				};
			if (o) a.push({
				tokens: [l]
			});
			else {
				var u = (a[a.length - 1] || (a[0] = {
						tokens: []
					})).tokens,
					h = u.length;
				1 === h && u[0].isLineHolder ? u[0] = l : (s || !h || i) && u.push(l)
			}
		}
	}

	function oi(t) {
		var e = (t.fontSize || t.fontFamily) && [t.fontStyle, t.fontWeight, (t.fontSize || 12) + "px", t.fontFamily ||
			"sans-serif"
		].join(" ");
		return e && E(e) || t.textFont || t.font
	}

	function si(t, e) {
		var n, i, r, a, o = e.x,
			s = e.y,
			l = e.width,
			u = e.height,
			h = e.r;
		0 > l && (o += l, l = -l), 0 > u && (s += u, u = -u), "number" == typeof h ? n = i = r = a = h : h instanceof Array ?
			1 === h.length ? n = i = r = a = h[0] : 2 === h.length ? (n = r = h[0], i = a = h[1]) : 3 === h.length ? (n = h[0],
				i = a = h[1], r = h[2]) : (n = h[0], i = h[1], r = h[2], a = h[3]) : n = i = r = a = 0;
		var c;
		n + i > l && (c = n + i, n *= l / c, i *= l / c), r + a > l && (c = r + a, r *= l / c, a *= l / c), i + r > u && (c =
			i + r, i *= u / c, r *= u / c), n + a > u && (c = n + a, n *= u / c, a *= u / c), t.moveTo(o + n, s), t.lineTo(o +
			l - i, s), 0 !== i && t.arc(o + l - i, s + i, i, -Math.PI / 2, 0), t.lineTo(o + l, s + u - r), 0 !== r && t.arc(o +
			l - r, s + u - r, r, 0, Math.PI / 2), t.lineTo(o + a, s + u), 0 !== a && t.arc(o + a, s + u - a, a, Math.PI / 2,
			Math.PI), t.lineTo(o, s + n), 0 !== n && t.arc(o + n, s + n, n, Math.PI, 1.5 * Math.PI)
	}

	function li(t) {
		return ui(t), f(t.rich, ui), t
	}

	function ui(t) {
		if (t) {
			t.font = oi(t);
			var e = t.textAlign;
			"middle" === e && (e = "center"), t.textAlign = null == e || jg[e] ? e : "left";
			var n = t.textVerticalAlign || t.textBaseline;
			"center" === n && (n = "middle"), t.textVerticalAlign = null == n || Zg[n] ? n : "top";
			var i = t.textPadding;
			i && (t.textPadding = L(t.textPadding))
		}
	}

	function hi(t, e, n, i, r, a) {
		i.rich ? di(t, e, n, i, r, a) : ci(t, e, n, i, r, a)
	}

	function ci(t, e, n, i, r, a) {
		var o, s = vi(i),
			l = !1,
			u = e.__attrCachedBy === kg.PLAIN_TEXT;
		a !== Pg ? (a && (o = a.style, l = !s && u && o), e.__attrCachedBy = s ? kg.NONE : kg.PLAIN_TEXT) : u && (e.__attrCachedBy =
			kg.NONE);
		var h = i.font || qg;
		l && h === (o.font || qg) || (e.font = h);
		var c = t.__computedFont;
		t.__styleFont !== h && (t.__styleFont = h, c = t.__computedFont = e.font);
		var d = i.textPadding,
			f = i.textLineHeight,
			p = t.__textCotentBlock;
		(!p || t.__dirtyText) && (p = t.__textCotentBlock = ii(n, c, d, f, i.truncate));
		var g = p.outerHeight,
			v = p.lines,
			m = p.lineHeight,
			y = xi(Qg, t, i, r),
			x = y.baseX,
			_ = y.baseY,
			w = y.textAlign || "left",
			b = y.textVerticalAlign;
		pi(e, i, r, x, _);
		var S = Zn(_, g, b),
			M = x,
			I = S;
		if (s || d) {
			var T = Xn(n, c),
				C = T;
			d && (C += d[1] + d[3]);
			var A = jn(x, C, w);
			s && mi(t, e, i, A, S, C, g), d && (M = Mi(x, w, d), I += d[0])
		}
		e.textAlign = w, e.textBaseline = "middle", e.globalAlpha = i.opacity || 1;
		for (var D = 0; D < Kg.length; D++) {
			var k = Kg[D],
				P = k[0],
				L = k[1],
				O = i[P];
			l && O === o[P] || (e[L] = Dg(e, L, O || k[2]))
		}
		I += m / 2;
		var E = i.textStrokeWidth,
			B = l ? o.textStrokeWidth : null,
			z = !l || E !== B,
			R = !l || z || i.textStroke !== o.textStroke,
			N = wi(i.textStroke, E),
			F = bi(i.textFill);
		if (N && (z && (e.lineWidth = E), R && (e.strokeStyle = N)), F && (l && i.textFill === o.textFill || (e.fillStyle =
				F)), 1 === v.length) N && e.strokeText(v[0], M, I), F && e.fillText(v[0], M, I);
		else
			for (var D = 0; D < v.length; D++) N && e.strokeText(v[D], M, I), F && e.fillText(v[D], M, I), I += m
	}

	function di(t, e, n, i, r, a) {
		a !== Pg && (e.__attrCachedBy = kg.NONE);
		var o = t.__textCotentBlock;
		(!o || t.__dirtyText) && (o = t.__textCotentBlock = ri(n, i)), fi(t, e, o, i, r)
	}

	function fi(t, e, n, i, r) {
		var a = n.width,
			o = n.outerWidth,
			s = n.outerHeight,
			l = i.textPadding,
			u = xi(Qg, t, i, r),
			h = u.baseX,
			c = u.baseY,
			d = u.textAlign,
			f = u.textVerticalAlign;
		pi(e, i, r, h, c);
		var p = jn(h, o, d),
			g = Zn(c, s, f),
			v = p,
			m = g;
		l && (v += l[3], m += l[0]);
		var y = v + a;
		vi(i) && mi(t, e, i, p, g, o, s);
		for (var x = 0; x < n.lines.length; x++) {
			for (var _, w = n.lines[x], b = w.tokens, S = b.length, M = w.lineHeight, I = w.width, T = 0, C = v, A = y, D = S -
					1; S > T && (_ = b[T], !_.textAlign || "left" === _.textAlign);) gi(t, e, _, i, M, m, C, "left"), I -= _.width, C +=
				_.width, T++;
			for (; D >= 0 && (_ = b[D], "right" === _.textAlign);) gi(t, e, _, i, M, m, A, "right"), I -= _.width, A -= _.width,
				D--;
			for (C += (a - (C - v) - (y - A) - I) / 2; D >= T;) _ = b[T], gi(t, e, _, i, M, m, C + _.width / 2, "center"), C +=
				_.width, T++;
			m += M
		}
	}

	function pi(t, e, n, i, r) {
		if (n && e.textRotation) {
			var a = e.textOrigin;
			"center" === a ? (i = n.width / 2 + n.x, r = n.height / 2 + n.y) : a && (i = a[0] + n.x, r = a[1] + n.y), t.translate(
				i, r), t.rotate(-e.textRotation), t.translate(-i, -r)
		}
	}

	function gi(t, e, n, i, r, a, o, s) {
		var l = i.rich[n.styleName] || {};
		l.text = n.text;
		var u = n.textVerticalAlign,
			h = a + r / 2;
		"top" === u ? h = a + n.height / 2 : "bottom" === u && (h = a + r - n.height / 2), !n.isLineHolder && vi(l) && mi(t,
			e, l, "right" === s ? o - n.width : "center" === s ? o - n.width / 2 : o, h - n.height / 2, n.width, n.height);
		var c = n.textPadding;
		c && (o = Mi(o, s, c), h -= n.height / 2 - c[2] - n.textHeight / 2), _i(e, "shadowBlur", k(l.textShadowBlur, i.textShadowBlur,
			0)), _i(e, "shadowColor", l.textShadowColor || i.textShadowColor || "transparent"), _i(e, "shadowOffsetX", k(l.textShadowOffsetX,
			i.textShadowOffsetX, 0)), _i(e, "shadowOffsetY", k(l.textShadowOffsetY, i.textShadowOffsetY, 0)), _i(e,
			"textAlign", s), _i(e, "textBaseline", "middle"), _i(e, "font", n.font || qg);
		var d = wi(l.textStroke || i.textStroke, p),
			f = bi(l.textFill || i.textFill),
			p = D(l.textStrokeWidth, i.textStrokeWidth);
		d && (_i(e, "lineWidth", p), _i(e, "strokeStyle", d), e.strokeText(n.text, o, h)), f && (_i(e, "fillStyle", f), e.fillText(
			n.text, o, h))
	}

	function vi(t) {
		return !!(t.textBackgroundColor || t.textBorderWidth && t.textBorderColor)
	}

	function mi(t, e, n, i, r, a, o) {
		var s = n.textBackgroundColor,
			l = n.textBorderWidth,
			u = n.textBorderColor,
			h = b(s);
		if (_i(e, "shadowBlur", n.textBoxShadowBlur || 0), _i(e, "shadowColor", n.textBoxShadowColor || "transparent"), _i(e,
				"shadowOffsetX", n.textBoxShadowOffsetX || 0), _i(e, "shadowOffsetY", n.textBoxShadowOffsetY || 0), h || l && u) {
			e.beginPath();
			var c = n.textBorderRadius;
			c ? si(e, {
				x: i,
				y: r,
				width: a,
				height: o,
				r: c
			}) : e.rect(i, r, a, o), e.closePath()
		}
		if (h)
			if (_i(e, "fillStyle", s), null != n.fillOpacity) {
				var d = e.globalAlpha;
				e.globalAlpha = n.fillOpacity * n.opacity, e.fill(), e.globalAlpha = d
			} else e.fill();
		else if (S(s)) {
			var f = s.image;
			f = Hn(f, null, t, yi, s), f && Wn(f) && e.drawImage(f, i, r, a, o)
		}
		if (l && u)
			if (_i(e, "lineWidth", l), _i(e, "strokeStyle", u), null != n.strokeOpacity) {
				var d = e.globalAlpha;
				e.globalAlpha = n.strokeOpacity * n.opacity, e.stroke(), e.globalAlpha = d
			} else e.stroke()
	}

	function yi(t, e) {
		e.image = t
	}

	function xi(t, e, n, i) {
		var r = n.x || 0,
			a = n.y || 0,
			o = n.textAlign,
			s = n.textVerticalAlign;
		if (i) {
			var l = n.textPosition;
			if (l instanceof Array) r = i.x + Si(l[0], i.width), a = i.y + Si(l[1], i.height);
			else {
				var u = e && e.calculateTextPosition ? e.calculateTextPosition($g, n, i) : Kn($g, n, i);
				r = u.x, a = u.y, o = o || u.textAlign, s = s || u.textVerticalAlign
			}
			var h = n.textOffset;
			h && (r += h[0], a += h[1])
		}
		return t = t || {}, t.baseX = r, t.baseY = a, t.textAlign = o, t.textVerticalAlign = s, t
	}

	function _i(t, e, n) {
		return t[e] = Dg(t, e, n), t[e]
	}

	function wi(t, e) {
		return null == t || 0 >= e || "transparent" === t || "none" === t ? null : t.image || t.colorStops ? "#000" : t
	}

	function bi(t) {
		return null == t || "none" === t ? null : t.image || t.colorStops ? "#000" : t
	}

	function Si(t, e) {
		return "string" == typeof t ? t.lastIndexOf("%") >= 0 ? parseFloat(t) / 100 * e : parseFloat(t) : t
	}

	function Mi(t, e, n) {
		return "right" === e ? t - n[1] : "center" === e ? t + n[3] / 2 - n[1] / 2 : t + n[3]
	}

	function Ii(t, e) {
		return null != t && (t || e.textBackgroundColor || e.textBorderWidth && e.textBorderColor || e.textPadding)
	}

	function Ti(t) {
		t = t || {}, _g.call(this, t);
		for (var e in t) t.hasOwnProperty(e) && "style" !== e && (this[e] = t[e]);
		this.style = new Og(t.style, this), this._rect = null, this.__clipPaths = null
	}

	function Ci(t) {
		Ti.call(this, t)
	}

	function Ai(t) {
		return parseInt(t, 10)
	}

	function Di(t) {
		return t ? t.__builtin__ ? !0 : "function" != typeof t.resize || "function" != typeof t.refresh ? !1 : !0 : !1
	}

	function ki(t, e, n) {
		return av.copy(t.getBoundingRect()), t.transform && av.applyTransform(t.transform), ov.width = e, ov.height = n, !av
			.intersect(ov)
	}

	function Pi(t, e) {
		if (t === e) return !1;
		if (!t || !e || t.length !== e.length) return !0;
		for (var n = 0; n < t.length; n++)
			if (t[n] !== e[n]) return !0;
		return !1
	}

	function Li(t, e) {
		for (var n = 0; n < t.length; n++) {
			var i = t[n];
			i.setTransform(e), e.beginPath(), i.buildPath(e, i.shape), e.clip(), i.restoreTransform(e)
		}
	}

	function Oi(t, e) {
		var n = document.createElement("div");
		return n.style.cssText = ["position:relative", "width:" + t + "px", "height:" + e + "px", "padding:0", "margin:0",
			"border-width:0"
		].join(";") + ";", n
	}

	function Ei(t) {
		return "mousewheel" === t && hp.browser.firefox ? "DOMMouseScroll" : t
	}

	function Bi(t) {
		var e = t.pointerType;
		return "pen" === e || "touch" === e
	}

	function zi(t) {
		t.touching = !0, null != t.touchTimer && (clearTimeout(t.touchTimer), t.touchTimer = null), t.touchTimer =
			setTimeout(function() {
				t.touching = !1, t.touchTimer = null
			}, 700)
	}

	function Ri(t) {
		t && (t.zrByTouch = !0)
	}

	function Ni(t, e) {
		return be(t.dom, new Vi(t, e), !0)
	}

	function Fi(t, e) {
		for (var n = e, i = !1; n && 9 !== n.nodeType && !(i = n.domBelongToZr || n !== e && n === t.painterRoot);) n = n.parentNode;
		return i
	}

	function Vi(t, e) {
		this.type = e.type, this.target = this.currentTarget = t.dom, this.pointerType = e.pointerType, this.clientX = e.clientX,
			this.clientY = e.clientY
	}

	function Hi(t, e) {
		var n = e.domHandlers;
		hp.pointerEventsSupported ? f(cv.pointer, function(i) {
			Wi(e, i, function(e) {
				n[i].call(t, e)
			})
		}) : (hp.touchEventsSupported && f(cv.touch, function(i) {
			Wi(e, i, function(r) {
				n[i].call(t, r), zi(e)
			})
		}), f(cv.mouse, function(i) {
			Wi(e, i, function(r) {
				r = we(r), e.touching || n[i].call(t, r)
			})
		}))
	}

	function Gi(t, e) {
		function n(n) {
			function i(i) {
				i = we(i), Fi(t, i.target) || (i = Ni(t, i), e.domHandlers[n].call(t, i))
			}
			Wi(e, n, i, {
				capture: !0
			})
		}
		hp.pointerEventsSupported ? f(dv.pointer, n) : hp.touchEventsSupported || f(dv.mouse, n)
	}

	function Wi(t, e, n, i) {
		t.mounted[e] = n, t.listenerOpts[e] = i, Se(t.domTarget, Ei(e), n, i)
	}

	function Xi(t) {
		var e = t.mounted;
		for (var n in e) e.hasOwnProperty(n) && Me(t.domTarget, Ei(n), e[n], t.listenerOpts[n]);
		t.mounted = {}
	}

	function Ui(t, e) {
		if (t._mayPointerCapture = null, hv && t._pointerCapturing ^ e) {
			t._pointerCapturing = e;
			var n = t._globalHandlerScope;
			e ? Gi(t, n) : Xi(n)
		}
	}

	function Yi(t, e) {
		this.domTarget = t, this.domHandlers = e, this.mounted = {}, this.listenerOpts = {}, this.touchTimer = null, this.touching = !
			1
	}

	function qi(t, e) {
		Lp.call(this), this.dom = t, this.painterRoot = e, this._localHandlerScope = new Yi(t, pv), hv && (this._globalHandlerScope =
			new Yi(document, gv)), this._pointerCapturing = !1, this._mayPointerCapture = null, Hi(this, this._localHandlerScope)
	}

	function ji(t, e) {
		var n = new wv(lp(), t, e);
		return xv[n.id] = n, n
	}

	function Zi(t) {
		if (t) t.dispose();
		else {
			for (var e in xv) xv.hasOwnProperty(e) && xv[e].dispose();
			xv = {}
		}
		return this
	}

	function Ki(t) {
		return xv[t]
	}

	function $i(t, e) {
		yv[t] = e
	}

	function Qi(t) {
		delete xv[t]
	}

	function Ji(t) {
		return t instanceof Array ? t : null == t ? [] : [t]
	}

	function tr(t, e, n) {
		if (t) {
			t[e] = t[e] || {}, t.emphasis = t.emphasis || {}, t.emphasis[e] = t.emphasis[e] || {};
			for (var i = 0, r = n.length; r > i; i++) {
				var a = n[i];
				!t.emphasis[e].hasOwnProperty(a) && t[e].hasOwnProperty(a) && (t.emphasis[e][a] = t[e][a])
			}
		}
	}

	function er(t) {
		return !Mv(t) || Iv(t) || t instanceof Date ? t : t.value
	}

	function nr(t) {
		return Mv(t) && !(t instanceof Array)
	}

	function ir(t, e) {
		e = (e || []).slice();
		var n = p(t || [], function(t) {
			return {
				exist: t
			}
		});
		return Sv(e, function(t, i) {
			if (Mv(t)) {
				for (var r = 0; r < n.length; r++)
					if (!n[r].option && null != t.id && n[r].exist.id === t.id + "") return n[r].option = t, void(e[i] = null);
				for (var r = 0; r < n.length; r++) {
					var a = n[r].exist;
					if (!(n[r].option || null != a.id && null != t.id || null == t.name || or(t) || or(a) || a.name !== t.name + ""))
						return n[r].option = t, void(e[i] = null)
				}
			}
		}), Sv(e, function(t) {
			if (Mv(t)) {
				for (var e = 0; e < n.length; e++) {
					var i = n[e].exist;
					if (!n[e].option && !or(i) && null == t.id) {
						n[e].option = t;
						break
					}
				}
				e >= n.length && n.push({
					option: t
				})
			}
		}), n
	}

	function rr(t) {
		var e = N();
		Sv(t, function(t) {
			var n = t.exist;
			n && e.set(n.id, t)
		}), Sv(t, function(t) {
			var n = t.option;
			O(!n || null == n.id || !e.get(n.id) || e.get(n.id) === t, "id duplicates: " + (n && n.id)), n && null != n.id &&
				e.set(n.id, t), !t.keyInfo && (t.keyInfo = {})
		}), Sv(t, function(t, n) {
			var i = t.exist,
				r = t.option,
				a = t.keyInfo;
			if (Mv(r)) {
				if (a.name = null != r.name ? r.name + "" : i ? i.name : Tv + n, i) a.id = i.id;
				else if (null != r.id) a.id = r.id + "";
				else {
					var o = 0;
					do a.id = "\x00" + a.name + "\x00" + o++; while (e.get(a.id))
				}
				e.set(a.id, t)
			}
		})
	}

	function ar(t) {
		var e = t.name;
		return !(!e || !e.indexOf(Tv))
	}

	function or(t) {
		return Mv(t) && t.id && 0 === (t.id + "").indexOf("\x00_ec_\x00")
	}

	function sr(t, e) {
		return null != e.dataIndexInside ? e.dataIndexInside : null != e.dataIndex ? _(e.dataIndex) ? p(e.dataIndex,
			function(e) {
				return t.indexOfRawIndex(e)
			}) : t.indexOfRawIndex(e.dataIndex) : null != e.name ? _(e.name) ? p(e.name, function(e) {
			return t.indexOfName(e)
		}) : t.indexOfName(e.name) : void 0
	}

	function lr() {
		var t = "__\x00ec_inner_" + Av++ + "_" + Math.random().toFixed(5);
		return function(e) {
			return e[t] || (e[t] = {})
		}
	}

	function ur(t, e, n) {
		if (b(e)) {
			var i = {};
			i[e + "Index"] = 0, e = i
		}
		var r = n && n.defaultMainType;
		!r || hr(e, r + "Index") || hr(e, r + "Id") || hr(e, r + "Name") || (e[r + "Index"] = 0);
		var a = {};
		return Sv(e, function(i, r) {
			var i = e[r];
			if ("dataIndex" === r || "dataIndexInside" === r) return void(a[r] = i);
			var o = r.match(/^(\w+)(Index|Id|Name)$/) || [],
				s = o[1],
				l = (o[2] || "").toLowerCase();
			if (!(!s || !l || null == i || "index" === l && "none" === i || n && n.includeMainTypes && u(n.includeMainTypes,
					s) < 0)) {
				var h = {
					mainType: s
				};
				("index" !== l || "all" !== i) && (h[l] = i);
				var c = t.queryComponents(h);
				a[s + "Models"] = c, a[s + "Model"] = c[0]
			}
		}), a
	}

	function hr(t, e) {
		return t && t.hasOwnProperty(e)
	}

	function cr(t, e, n) {
		t.setAttribute ? t.setAttribute(e, n) : t[e] = n
	}

	function dr(t, e) {
		return t.getAttribute ? t.getAttribute(e) : t[e]
	}

	function fr(t) {
		return "auto" === t ? hp.domSupported ? "html" : "richText" : t || "html"
	}

	function pr(t) {
		var e = {
			main: "",
			sub: ""
		};
		return t && (t = t.split(Dv), e.main = t[0] || "", e.sub = t[1] || ""), e
	}

	function gr(t) {
		O(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t), 'componentType "' + t + '" illegal')
	}

	function vr(t, e) {
		t.$constructor = t, t.extend = function(t) {
			op && f(e, function(e) {
				t[e] || console.warn("Method `" + e + "` should be implemented" + (t.type ? " in " + t.type : "") + ".")
			});
			var n = this,
				i = function() {
					t.$constructor ? t.$constructor.apply(this, arguments) : n.apply(this, arguments)
				};
			return o(i.prototype, t), i.extend = this.extend, i.superCall = yr, i.superApply = xr, h(i, this), i.superClass =
				n, i
		}
	}

	function mr(t) {
		var e = ["__\x00is_clz", Pv++, Math.random().toFixed(3)].join("_");
		t.prototype[e] = !0, op && O(!t.isInstance, 'The method "is" can not be defined.'), t.isInstance = function(t) {
			return !(!t || !t[e])
		}
	}

	function yr(t, e) {
		var n = P(arguments, 2);
		return this.superClass.prototype[e].apply(t, n)
	}

	function xr(t, e, n) {
		return this.superClass.prototype[e].apply(t, n)
	}

	function _r(t, e) {
		function n(t) {
			var e = i[t.main];
			return e && e[kv] || (e = i[t.main] = {}, e[kv] = !0), e
		}
		e = e || {};
		var i = {};
		if (t.registerClass = function(t, e) {
				if (e)
					if (gr(e), e = pr(e), e.sub) {
						if (e.sub !== kv) {
							var r = n(e);
							r[e.sub] = t
						}
					} else op && i[e.main] && console.warn(e.main + " exists."), i[e.main] = t;
				return t
			}, t.getClass = function(t, e, n) {
				var r = i[t];
				if (r && r[kv] && (r = e ? r[e] : null), n && !r) throw new Error(e ? "Component " + t + "." + (e || "") +
					" not exists. Load it first." : t + ".type should be specified.");
				return r
			}, t.getClassesByMainType = function(t) {
				t = pr(t);
				var e = [],
					n = i[t.main];
				return n && n[kv] ? f(n, function(t, n) {
					n !== kv && e.push(t)
				}) : e.push(n), e
			}, t.hasClass = function(t) {
				return t = pr(t), !!i[t.main]
			}, t.getAllClassMainTypes = function() {
				var t = [];
				return f(i, function(e, n) {
					t.push(n)
				}), t
			}, t.hasSubTypes = function(t) {
				t = pr(t);
				var e = i[t.main];
				return e && e[kv]
			}, t.parseClassType = pr, e.registerWhenExtend) {
			var r = t.extend;
			r && (t.extend = function(e) {
				var n = r.call(this, e);
				return t.registerClass(n, e.type)
			})
		}
		return t
	}

	function wr(t) {
		return t > -Fv && Fv > t
	}

	function br(t) {
		return t > Fv || -Fv > t
	}

	function Sr(t, e, n, i, r) {
		var a = 1 - r;
		return a * a * (a * t + 3 * r * e) + r * r * (r * i + 3 * a * n)
	}

	function Mr(t, e, n, i, r) {
		var a = 1 - r;
		return 3 * (((e - t) * a + 2 * (n - e) * r) * a + (i - n) * r * r)
	}

	function Ir(t, e, n, i, r, a) {
		var o = i + 3 * (e - n) - t,
			s = 3 * (n - 2 * e + t),
			l = 3 * (e - t),
			u = t - r,
			h = s * s - 3 * o * l,
			c = s * l - 9 * o * u,
			d = l * l - 3 * s * u,
			f = 0;
		if (wr(h) && wr(c))
			if (wr(s)) a[0] = 0;
			else {
				var p = -l / s;
				p >= 0 && 1 >= p && (a[f++] = p)
			}
		else {
			var g = c * c - 4 * h * d;
			if (wr(g)) {
				var v = c / h,
					p = -s / o + v,
					m = -v / 2;
				p >= 0 && 1 >= p && (a[f++] = p), m >= 0 && 1 >= m && (a[f++] = m)
			} else if (g > 0) {
				var y = Nv(g),
					x = h * s + 1.5 * o * (-c + y),
					_ = h * s + 1.5 * o * (-c - y);
				x = 0 > x ? -Rv(-x, Gv) : Rv(x, Gv), _ = 0 > _ ? -Rv(-_, Gv) : Rv(_, Gv);
				var p = (-s - (x + _)) / (3 * o);
				p >= 0 && 1 >= p && (a[f++] = p)
			} else {
				var w = (2 * h * s - 3 * o * c) / (2 * Nv(h * h * h)),
					b = Math.acos(w) / 3,
					S = Nv(h),
					M = Math.cos(b),
					p = (-s - 2 * S * M) / (3 * o),
					m = (-s + S * (M + Hv * Math.sin(b))) / (3 * o),
					I = (-s + S * (M - Hv * Math.sin(b))) / (3 * o);
				p >= 0 && 1 >= p && (a[f++] = p), m >= 0 && 1 >= m && (a[f++] = m), I >= 0 && 1 >= I && (a[f++] = I)
			}
		}
		return f
	}

	function Tr(t, e, n, i, r) {
		var a = 6 * n - 12 * e + 6 * t,
			o = 9 * e + 3 * i - 3 * t - 9 * n,
			s = 3 * e - 3 * t,
			l = 0;
		if (wr(o)) {
			if (br(a)) {
				var u = -s / a;
				u >= 0 && 1 >= u && (r[l++] = u)
			}
		} else {
			var h = a * a - 4 * o * s;
			if (wr(h)) r[0] = -a / (2 * o);
			else if (h > 0) {
				var c = Nv(h),
					u = (-a + c) / (2 * o),
					d = (-a - c) / (2 * o);
				u >= 0 && 1 >= u && (r[l++] = u), d >= 0 && 1 >= d && (r[l++] = d)
			}
		}
		return l
	}

	function Cr(t, e, n, i, r, a) {
		var o = (e - t) * r + t,
			s = (n - e) * r + e,
			l = (i - n) * r + n,
			u = (s - o) * r + o,
			h = (l - s) * r + s,
			c = (h - u) * r + u;
		a[0] = t, a[1] = o, a[2] = u, a[3] = c, a[4] = c, a[5] = h, a[6] = l, a[7] = i
	}

	function Ar(t, e, n, i, r, a, o, s, l, u, h) {
		var c, d, f, p, g, v = .005,
			m = 1 / 0;
		Wv[0] = l, Wv[1] = u;
		for (var y = 0; 1 > y; y += .05) Xv[0] = Sr(t, n, r, o, y), Xv[1] = Sr(e, i, a, s, y), p = Dp(Wv, Xv), m > p && (c =
			y, m = p);
		m = 1 / 0;
		for (var x = 0; 32 > x && !(Vv > v); x++) d = c - v, f = c + v, Xv[0] = Sr(t, n, r, o, d), Xv[1] = Sr(e, i, a, s, d),
			p = Dp(Xv, Wv), d >= 0 && m > p ? (c = d, m = p) : (Uv[0] = Sr(t, n, r, o, f), Uv[1] = Sr(e, i, a, s, f), g = Dp(Uv,
				Wv), 1 >= f && m > g ? (c = f, m = g) : v *= .5);
		return h && (h[0] = Sr(t, n, r, o, c), h[1] = Sr(e, i, a, s, c)), Nv(m)
	}

	function Dr(t, e, n, i) {
		var r = 1 - i;
		return r * (r * t + 2 * i * e) + i * i * n
	}

	function kr(t, e, n, i) {
		return 2 * ((1 - i) * (e - t) + i * (n - e))
	}

	function Pr(t, e, n, i, r) {
		var a = t - 2 * e + n,
			o = 2 * (e - t),
			s = t - i,
			l = 0;
		if (wr(a)) {
			if (br(o)) {
				var u = -s / o;
				u >= 0 && 1 >= u && (r[l++] = u)
			}
		} else {
			var h = o * o - 4 * a * s;
			if (wr(h)) {
				var u = -o / (2 * a);
				u >= 0 && 1 >= u && (r[l++] = u)
			} else if (h > 0) {
				var c = Nv(h),
					u = (-o + c) / (2 * a),
					d = (-o - c) / (2 * a);
				u >= 0 && 1 >= u && (r[l++] = u), d >= 0 && 1 >= d && (r[l++] = d)
			}
		}
		return l
	}

	function Lr(t, e, n) {
		var i = t + n - 2 * e;
		return 0 === i ? .5 : (t - e) / i
	}

	function Or(t, e, n, i, r) {
		var a = (e - t) * i + t,
			o = (n - e) * i + e,
			s = (o - a) * i + a;
		r[0] = t, r[1] = a, r[2] = s, r[3] = s, r[4] = o, r[5] = n
	}

	function Er(t, e, n, i, r, a, o, s, l) {
		var u, h = .005,
			c = 1 / 0;
		Wv[0] = o, Wv[1] = s;
		for (var d = 0; 1 > d; d += .05) {
			Xv[0] = Dr(t, n, r, d), Xv[1] = Dr(e, i, a, d);
			var f = Dp(Wv, Xv);
			c > f && (u = d, c = f)
		}
		c = 1 / 0;
		for (var p = 0; 32 > p && !(Vv > h); p++) {
			var g = u - h,
				v = u + h;
			Xv[0] = Dr(t, n, r, g), Xv[1] = Dr(e, i, a, g);
			var f = Dp(Xv, Wv);
			if (g >= 0 && c > f) u = g, c = f;
			else {
				Uv[0] = Dr(t, n, r, v), Uv[1] = Dr(e, i, a, v);
				var m = Dp(Uv, Wv);
				1 >= v && c > m ? (u = v, c = m) : h *= .5
			}
		}
		return l && (l[0] = Dr(t, n, r, u), l[1] = Dr(e, i, a, u)), Nv(c)
	}

	function Br(t, e, n) {
		if (0 !== t.length) {
			var i, r = t[0],
				a = r[0],
				o = r[0],
				s = r[1],
				l = r[1];
			for (i = 1; i < t.length; i++) r = t[i], a = Yv(a, r[0]), o = qv(o, r[0]), s = Yv(s, r[1]), l = qv(l, r[1]);
			e[0] = a, e[1] = s, n[0] = o, n[1] = l
		}
	}

	function zr(t, e, n, i, r, a) {
		r[0] = Yv(t, n), r[1] = Yv(e, i), a[0] = qv(t, n), a[1] = qv(e, i)
	}

	function Rr(t, e, n, i, r, a, o, s, l, u) {
		var h, c = Tr,
			d = Sr,
			f = c(t, n, r, o, tm);
		for (l[0] = 1 / 0, l[1] = 1 / 0, u[0] = -1 / 0, u[1] = -1 / 0, h = 0; f > h; h++) {
			var p = d(t, n, r, o, tm[h]);
			l[0] = Yv(p, l[0]), u[0] = qv(p, u[0])
		}
		for (f = c(e, i, a, s, em), h = 0; f > h; h++) {
			var g = d(e, i, a, s, em[h]);
			l[1] = Yv(g, l[1]), u[1] = qv(g, u[1])
		}
		l[0] = Yv(t, l[0]), u[0] = qv(t, u[0]), l[0] = Yv(o, l[0]), u[0] = qv(o, u[0]), l[1] = Yv(e, l[1]), u[1] = qv(e, u[1]),
			l[1] = Yv(s, l[1]), u[1] = qv(s, u[1])
	}

	function Nr(t, e, n, i, r, a, o, s) {
		var l = Lr,
			u = Dr,
			h = qv(Yv(l(t, n, r), 1), 0),
			c = qv(Yv(l(e, i, a), 1), 0),
			d = u(t, n, r, h),
			f = u(e, i, a, c);
		o[0] = Yv(t, r, d), o[1] = Yv(e, a, f), s[0] = qv(t, r, d), s[1] = qv(e, a, f)
	}

	function Fr(t, e, n, i, r, a, o, s, l) {
		var u = oe,
			h = se,
			c = Math.abs(r - a);
		if (1e-4 > c % Kv && c > 1e-4) return s[0] = t - n, s[1] = e - i, l[0] = t + n, void(l[1] = e + i);
		if ($v[0] = Zv(r) * n + t, $v[1] = jv(r) * i + e, Qv[0] = Zv(a) * n + t, Qv[1] = jv(a) * i + e, u(s, $v, Qv), h(l,
				$v, Qv), r %= Kv, 0 > r && (r += Kv), a %= Kv, 0 > a && (a += Kv), r > a && !o ? a += Kv : a > r && o && (r += Kv),
			o) {
			var d = a;
			a = r, r = d
		}
		for (var f = 0; a > f; f += Math.PI / 2) f > r && (Jv[0] = Zv(f) * n + t, Jv[1] = jv(f) * i + e, u(s, Jv, s), h(l,
			Jv, l))
	}

	function Vr(t, e, n, i, r, a, o) {
		if (0 === r) return !1;
		var s = r,
			l = 0,
			u = t;
		if (o > e + s && o > i + s || e - s > o && i - s > o || a > t + s && a > n + s || t - s > a && n - s > a) return !1;
		if (t === n) return Math.abs(a - t) <= s / 2;
		l = (e - i) / (t - n), u = (t * i - n * e) / (t - n);
		var h = l * a - o + u,
			c = h * h / (l * l + 1);
		return s / 2 * s / 2 >= c
	}

	function Hr(t, e, n, i, r, a, o, s, l, u, h) {
		if (0 === l) return !1;
		var c = l;
		if (h > e + c && h > i + c && h > a + c && h > s + c || e - c > h && i - c > h && a - c > h && s - c > h || u > t +
			c && u > n + c && u > r + c && u > o + c || t - c > u && n - c > u && r - c > u && o - c > u) return !1;
		var d = Ar(t, e, n, i, r, a, o, s, u, h, null);
		return c / 2 >= d
	}

	function Gr(t, e, n, i, r, a, o, s, l) {
		if (0 === o) return !1;
		var u = o;
		if (l > e + u && l > i + u && l > a + u || e - u > l && i - u > l && a - u > l || s > t + u && s > n + u && s > r +
			u || t - u > s && n - u > s && r - u > s) return !1;
		var h = Er(t, e, n, i, r, a, s, l, null);
		return u / 2 >= h
	}

	function Wr(t) {
		return t %= gm, 0 > t && (t += gm), t
	}

	function Xr(t, e, n, i, r, a, o, s, l) {
		if (0 === o) return !1;
		var u = o;
		s -= t, l -= e;
		var h = Math.sqrt(s * s + l * l);
		if (h - u > n || n > h + u) return !1;
		if (Math.abs(i - r) % vm < 1e-4) return !0;
		if (a) {
			var c = i;
			i = Wr(r), r = Wr(c)
		} else i = Wr(i), r = Wr(r);
		i > r && (r += vm);
		var d = Math.atan2(l, s);
		return 0 > d && (d += vm), d >= i && r >= d || d + vm >= i && r >= d + vm
	}

	function Ur(t, e, n, i, r, a) {
		if (a > e && a > i || e > a && i > a) return 0;
		if (i === e) return 0;
		var o = e > i ? 1 : -1,
			s = (a - e) / (i - e);
		(1 === s || 0 === s) && (o = e > i ? .5 : -.5);
		var l = s * (n - t) + t;
		return l === r ? 1 / 0 : l > r ? o : 0
	}

	function Yr(t, e) {
		return Math.abs(t - e) < xm
	}

	function qr() {
		var t = wm[0];
		wm[0] = wm[1], wm[1] = t
	}

	function jr(t, e, n, i, r, a, o, s, l, u) {
		if (u > e && u > i && u > a && u > s || e > u && i > u && a > u && s > u) return 0;
		var h = Ir(e, i, a, s, u, _m);
		if (0 === h) return 0;
		for (var c, d, f = 0, p = -1, g = 0; h > g; g++) {
			var v = _m[g],
				m = 0 === v || 1 === v ? .5 : 1,
				y = Sr(t, n, r, o, v);
			l > y || (0 > p && (p = Tr(e, i, a, s, wm), wm[1] < wm[0] && p > 1 && qr(), c = Sr(e, i, a, s, wm[0]), p > 1 && (d =
					Sr(e, i, a, s, wm[1]))), f += 2 === p ? v < wm[0] ? e > c ? m : -m : v < wm[1] ? c > d ? m : -m : d > s ? m : -m :
				v < wm[0] ? e > c ? m : -m : c > s ? m : -m)
		}
		return f
	}

	function Zr(t, e, n, i, r, a, o, s) {
		if (s > e && s > i && s > a || e > s && i > s && a > s) return 0;
		var l = Pr(e, i, a, s, _m);
		if (0 === l) return 0;
		var u = Lr(e, i, a);
		if (u >= 0 && 1 >= u) {
			for (var h = 0, c = Dr(e, i, a, u), d = 0; l > d; d++) {
				var f = 0 === _m[d] || 1 === _m[d] ? .5 : 1,
					p = Dr(t, n, r, _m[d]);
				o > p || (h += _m[d] < u ? e > c ? f : -f : c > a ? f : -f)
			}
			return h
		}
		var f = 0 === _m[0] || 1 === _m[0] ? .5 : 1,
			p = Dr(t, n, r, _m[0]);
		return o > p ? 0 : e > a ? f : -f
	}

	function Kr(t, e, n, i, r, a, o, s) {
		if (s -= e, s > n || -n > s) return 0;
		var l = Math.sqrt(n * n - s * s);
		_m[0] = -l, _m[1] = l;
		var u = Math.abs(i - r);
		if (1e-4 > u) return 0;
		if (1e-4 > u % ym) {
			i = 0, r = ym;
			var h = a ? 1 : -1;
			return o >= _m[0] + t && o <= _m[1] + t ? h : 0
		}
		if (a) {
			var l = i;
			i = Wr(r), r = Wr(l)
		} else i = Wr(i), r = Wr(r);
		i > r && (r += ym);
		for (var c = 0, d = 0; 2 > d; d++) {
			var f = _m[d];
			if (f + t > o) {
				var p = Math.atan2(s, f),
					h = a ? 1 : -1;
				0 > p && (p = ym + p), (p >= i && r >= p || p + ym >= i && r >= p + ym) && (p > Math.PI / 2 && p < 1.5 * Math.PI &&
					(h = -h), c += h)
			}
		}
		return c
	}

	function $r(t, e, n, i, r) {
		for (var a = 0, o = 0, s = 0, l = 0, u = 0, h = 0; h < t.length;) {
			var c = t[h++];
			switch (c === mm.M && h > 1 && (n || (a += Ur(o, s, l, u, i, r))), 1 === h && (o = t[h], s = t[h + 1], l = o, u = s),
				c) {
				case mm.M:
					l = t[h++], u = t[h++], o = l, s = u;
					break;
				case mm.L:
					if (n) {
						if (Vr(o, s, t[h], t[h + 1], e, i, r)) return !0
					} else a += Ur(o, s, t[h], t[h + 1], i, r) || 0;
					o = t[h++], s = t[h++];
					break;
				case mm.C:
					if (n) {
						if (Hr(o, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], e, i, r)) return !0
					} else a += jr(o, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], i, r) || 0;
					o = t[h++], s = t[h++];
					break;
				case mm.Q:
					if (n) {
						if (Gr(o, s, t[h++], t[h++], t[h], t[h + 1], e, i, r)) return !0
					} else a += Zr(o, s, t[h++], t[h++], t[h], t[h + 1], i, r) || 0;
					o = t[h++], s = t[h++];
					break;
				case mm.A:
					var d = t[h++],
						f = t[h++],
						p = t[h++],
						g = t[h++],
						v = t[h++],
						m = t[h++];
					h += 1;
					var y = 1 - t[h++],
						x = Math.cos(v) * p + d,
						_ = Math.sin(v) * g + f;
					h > 1 ? a += Ur(o, s, x, _, i, r) : (l = x, u = _);
					var w = (i - d) * g / p + d;
					if (n) {
						if (Xr(d, f, g, v, v + m, y, e, w, r)) return !0
					} else a += Kr(d, f, g, v, v + m, y, w, r);
					o = Math.cos(v + m) * p + d, s = Math.sin(v + m) * g + f;
					break;
				case mm.R:
					l = o = t[h++], u = s = t[h++];
					var b = t[h++],
						S = t[h++],
						x = l + b,
						_ = u + S;
					if (n) {
						if (Vr(l, u, x, u, e, i, r) || Vr(x, u, x, _, e, i, r) || Vr(x, _, l, _, e, i, r) || Vr(l, _, l, u, e, i, r))
							return !0
					} else a += Ur(x, u, x, _, i, r), a += Ur(l, _, l, u, i, r);
					break;
				case mm.Z:
					if (n) {
						if (Vr(o, s, l, u, e, i, r)) return !0
					} else a += Ur(o, s, l, u, i, r);
					o = l, s = u
			}
		}
		return n || Yr(s, u) || (a += Ur(o, s, l, u, i, r) || 0), 0 !== a
	}

	function Qr(t, e, n) {
		return $r(t, 0, !1, e, n)
	}

	function Jr(t, e, n, i) {
		return $r(t, e, !0, n, i)
	}

	function ta(t) {
		Ti.call(this, t), this.path = null
	}

	function ea(t, e, n, i, r, a, o, s, l, u, h) {
		var c = l * (Om / 180),
			d = Lm(c) * (t - n) / 2 + Pm(c) * (e - i) / 2,
			f = -1 * Pm(c) * (t - n) / 2 + Lm(c) * (e - i) / 2,
			p = d * d / (o * o) + f * f / (s * s);
		p > 1 && (o *= km(p), s *= km(p));
		var g = (r === a ? -1 : 1) * km((o * o * s * s - o * o * f * f - s * s * d * d) / (o * o * f * f + s * s * d * d)) ||
			0,
			v = g * o * f / s,
			m = g * -s * d / o,
			y = (t + n) / 2 + Lm(c) * v - Pm(c) * m,
			x = (e + i) / 2 + Pm(c) * v + Lm(c) * m,
			_ = zm([1, 0], [(d - v) / o, (f - m) / s]),
			w = [(d - v) / o, (f - m) / s],
			b = [(-1 * d - v) / o, (-1 * f - m) / s],
			S = zm(w, b);
		Bm(w, b) <= -1 && (S = Om), Bm(w, b) >= 1 && (S = 0), 0 === a && S > 0 && (S -= 2 * Om), 1 === a && 0 > S && (S += 2 *
			Om), h.addData(u, y, x, o, s, _, S, c, a)
	}

	function na(t) {
		if (!t) return new pm;
		for (var e, n = 0, i = 0, r = n, a = i, o = new pm, s = pm.CMD, l = t.match(Rm), u = 0; u < l.length; u++) {
			for (var h, c = l[u], d = c.charAt(0), f = c.match(Nm) || [], p = f.length, g = 0; p > g; g++) f[g] = parseFloat(f[
				g]);
			for (var v = 0; p > v;) {
				var m, y, x, _, w, b, S, M = n,
					I = i;
				switch (d) {
					case "l":
						n += f[v++], i += f[v++], h = s.L, o.addData(h, n, i);
						break;
					case "L":
						n = f[v++], i = f[v++], h = s.L, o.addData(h, n, i);
						break;
					case "m":
						n += f[v++], i += f[v++], h = s.M, o.addData(h, n, i), r = n, a = i, d = "l";
						break;
					case "M":
						n = f[v++], i = f[v++], h = s.M, o.addData(h, n, i), r = n, a = i, d = "L";
						break;
					case "h":
						n += f[v++], h = s.L, o.addData(h, n, i);
						break;
					case "H":
						n = f[v++], h = s.L, o.addData(h, n, i);
						break;
					case "v":
						i += f[v++], h = s.L, o.addData(h, n, i);
						break;
					case "V":
						i = f[v++], h = s.L, o.addData(h, n, i);
						break;
					case "C":
						h = s.C, o.addData(h, f[v++], f[v++], f[v++], f[v++], f[v++], f[v++]), n = f[v - 2], i = f[v - 1];
						break;
					case "c":
						h = s.C, o.addData(h, f[v++] + n, f[v++] + i, f[v++] + n, f[v++] + i, f[v++] + n, f[v++] + i), n += f[v - 2], i +=
							f[v - 1];
						break;
					case "S":
						m = n, y = i;
						var T = o.len(),
							C = o.data;
						e === s.C && (m += n - C[T - 4], y += i - C[T - 3]), h = s.C, M = f[v++], I = f[v++], n = f[v++], i = f[v++], o.addData(
							h, m, y, M, I, n, i);
						break;
					case "s":
						m = n, y = i;
						var T = o.len(),
							C = o.data;
						e === s.C && (m += n - C[T - 4], y += i - C[T - 3]), h = s.C, M = n + f[v++], I = i + f[v++], n += f[v++], i +=
							f[v++], o.addData(h, m, y, M, I, n, i);
						break;
					case "Q":
						M = f[v++], I = f[v++], n = f[v++], i = f[v++], h = s.Q, o.addData(h, M, I, n, i);
						break;
					case "q":
						M = f[v++] + n, I = f[v++] + i, n += f[v++], i += f[v++], h = s.Q, o.addData(h, M, I, n, i);
						break;
					case "T":
						m = n, y = i;
						var T = o.len(),
							C = o.data;
						e === s.Q && (m += n - C[T - 4], y += i - C[T - 3]), n = f[v++], i = f[v++], h = s.Q, o.addData(h, m, y, n, i);
						break;
					case "t":
						m = n, y = i;
						var T = o.len(),
							C = o.data;
						e === s.Q && (m += n - C[T - 4], y += i - C[T - 3]), n += f[v++], i += f[v++], h = s.Q, o.addData(h, m, y, n, i);
						break;
					case "A":
						x = f[v++], _ = f[v++], w = f[v++], b = f[v++], S = f[v++], M = n, I = i, n = f[v++], i = f[v++], h = s.A, ea(M,
							I, n, i, b, S, x, _, w, h, o);
						break;
					case "a":
						x = f[v++], _ = f[v++], w = f[v++], b = f[v++], S = f[v++], M = n, I = i, n += f[v++], i += f[v++], h = s.A, ea(
							M, I, n, i, b, S, x, _, w, h, o)
				}
			}("z" === d || "Z" === d) && (h = s.Z, o.addData(h), n = r, i = a), e = h
		}
		return o.toStatic(), o
	}

	function ia(t, e) {
		var n = na(t);
		return e = e || {}, e.buildPath = function(t) {
			if (t.setData) {
				t.setData(n.data);
				var e = t.getContext();
				e && t.rebuildPath(e)
			} else {
				var e = t;
				n.rebuildPath(e)
			}
		}, e.applyTransform = function(t) {
			Dm(n, t), this.dirty(!0)
		}, e
	}

	function ra(t, e) {
		return new ta(ia(t, e))
	}

	function aa(t, e) {
		return ta.extend(ia(t, e))
	}

	function oa(t, e) {
		for (var n = [], i = t.length, r = 0; i > r; r++) {
			var a = t[r];
			a.path || a.createPathProxy(), a.__dirtyPath && a.buildPath(a.path, a.shape, !0), n.push(a.path)
		}
		var o = new ta(e);
		return o.createPathProxy(), o.buildPath = function(t) {
			t.appendPath(n);
			var e = t.getContext();
			e && t.rebuildPath(e)
		}, o
	}

	function sa(t, e, n, i, r, a, o) {
		var s = .5 * (n - t),
			l = .5 * (i - e);
		return (2 * (e - n) + s + l) * o + (-3 * (e - n) - 2 * s - l) * a + s * r + e
	}

	function la(t, e, n) {
		var i = e.points,
			r = e.smooth;
		if (i && i.length >= 2) {
			if (r && "spline" !== r) {
				var a = Ym(i, r, n, e.smoothConstraint);
				t.moveTo(i[0][0], i[0][1]);
				for (var o = i.length, s = 0;
					(n ? o : o - 1) > s; s++) {
					var l = a[2 * s],
						u = a[2 * s + 1],
						h = i[(s + 1) % o];
					t.bezierCurveTo(l[0], l[1], u[0], u[1], h[0], h[1])
				}
			} else {
				"spline" === r && (i = Um(i, n)), t.moveTo(i[0][0], i[0][1]);
				for (var s = 1, c = i.length; c > s; s++) t.lineTo(i[s][0], i[s][1])
			}
			n && t.closePath()
		}
	}

	function ua(t, e, n) {
		if (e) {
			var i = e.x1,
				r = e.x2,
				a = e.y1,
				o = e.y2;
			t.x1 = i, t.x2 = r, t.y1 = a, t.y2 = o;
			var s = n && n.lineWidth;
			s && (Zm(2 * i) === Zm(2 * r) && (t.x1 = t.x2 = ca(i, s, !0)), Zm(2 * a) === Zm(2 * o) && (t.y1 = t.y2 = ca(a, s, !
				0)))
		}
	}

	function ha(t, e, n) {
		if (e) {
			var i = e.x,
				r = e.y,
				a = e.width,
				o = e.height;
			t.x = i, t.y = r, t.width = a, t.height = o;
			var s = n && n.lineWidth;
			s && (t.x = ca(i, s, !0), t.y = ca(r, s, !0), t.width = Math.max(ca(i + a, s, !1) - t.x, 0 === a ? 0 : 1), t.height =
				Math.max(ca(r + o, s, !1) - t.y, 0 === o ? 0 : 1))
		}
	}

	function ca(t, e, n) {
		if (!e) return t;
		var i = Zm(2 * t);
		return (i + Zm(e)) % 2 === 0 ? i / 2 : (i + (n ? 1 : -1)) / 2
	}

	function da(t, e, n) {
		var i = t.cpx2,
			r = t.cpy2;
		return null === i || null === r ? [(n ? Mr : Sr)(t.x1, t.cpx1, t.cpx2, t.x2, e), (n ? Mr : Sr)(t.y1, t.cpy1, t.cpy2,
			t.y2, e)] : [(n ? kr : Dr)(t.x1, t.cpx1, t.x2, e), (n ? kr : Dr)(t.y1, t.cpy1, t.y2, e)]
	}

	function fa(t) {
		Ti.call(this, t), this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, this.notClear = !0
	}

	function pa(t) {
		return ta.extend(t)
	}

	function ga(t, e) {
		return aa(t, e)
	}

	function va(t, e) {
		my[t] = e
	}

	function ma(t) {
		return my.hasOwnProperty(t) ? my[t] : void 0
	}

	function ya(t, e, n, i) {
		var r = ra(t, e);
		return n && ("center" === i && (n = _a(n, r.getBoundingRect())), wa(r, n)), r
	}

	function xa(t, e, n) {
		var i = new Ci({
			style: {
				image: t,
				x: e.x,
				y: e.y,
				width: e.width,
				height: e.height
			},
			onload: function(t) {
				if ("center" === n) {
					var r = {
						width: t.width,
						height: t.height
					};
					i.setStyle(_a(e, r))
				}
			}
		});
		return i
	}

	function _a(t, e) {
		var n, i = e.width / e.height,
			r = t.height * i;
		r <= t.width ? n = t.height : (r = t.width, n = r / i);
		var a = t.x + t.width / 2,
			o = t.y + t.height / 2;
		return {
			x: a - r / 2,
			y: o - n / 2,
			width: r,
			height: n
		}
	}

	function wa(t, e) {
		if (t.applyTransform) {
			var n = t.getBoundingRect(),
				i = n.calculateTransform(e);
			t.applyTransform(i)
		}
	}

	function ba(t) {
		return ua(t.shape, t.shape, t.style), t
	}

	function Sa(t) {
		return ha(t.shape, t.shape, t.style), t
	}

	function Ma(t) {
		return null != t && "none" !== t
	}

	function Ia(t) {
		if ("string" != typeof t) return t;
		var e = _y.get(t);
		return e || (e = nn(t, -.1), 1e4 > wy && (_y.set(t, e), wy++)), e
	}

	function Ta(t) {
		if (t.__hoverStlDirty) {
			t.__hoverStlDirty = !1;
			var e = t.__hoverStl;
			if (!e) return void(t.__cachedNormalStl = t.__cachedNormalZ2 = null);
			var n = t.__cachedNormalStl = {};
			t.__cachedNormalZ2 = t.z2;
			var i = t.style;
			for (var r in e) null != e[r] && (n[r] = i[r]);
			n.fill = i.fill, n.stroke = i.stroke
		}
	}

	function Ca(t) {
		var e = t.__hoverStl;
		if (e && !t.__highlighted) {
			var n = t.__zr,
				i = t.useHoverLayer && n && "canvas" === n.painter.type;
			if (t.__highlighted = i ? "layer" : "plain", !(t.isGroup || !n && t.useHoverLayer)) {
				var r = t,
					a = t.style;
				i && (r = n.addHover(t), a = r.style), Ka(a), i || Ta(r), a.extendFrom(e), Aa(a, e, "fill"), Aa(a, e, "stroke"),
					Za(a), i || (t.dirty(!1), t.z2 += cy)
			}
		}
	}

	function Aa(t, e, n) {
		!Ma(e[n]) && Ma(t[n]) && (t[n] = Ia(t[n]))
	}

	function Da(t) {
		var e = t.__highlighted;
		if (e && (t.__highlighted = !1, !t.isGroup))
			if ("layer" === e) t.__zr && t.__zr.removeHover(t);
			else {
				var n = t.style,
					i = t.__cachedNormalStl;
				i && (Ka(n), t.setStyle(i), Za(n));
				var r = t.__cachedNormalZ2;
				null != r && t.z2 - r === cy && (t.z2 = r)
			}
	}

	function ka(t, e, n) {
		var i, r = py,
			a = py;
		t.__highlighted && (r = fy, i = !0), e(t, n), t.__highlighted && (a = fy, i = !0), t.isGroup && t.traverse(function(
			t) {
			!t.isGroup && e(t, n)
		}), i && t.__highDownOnUpdate && t.__highDownOnUpdate(r, a)
	}

	function Pa(t, e) {
		e = t.__hoverStl = e !== !1 && (t.hoverStyle || e || {}), t.__hoverStlDirty = !0, t.__highlighted && (t.__cachedNormalStl =
			null, Da(t), Ca(t))
	}

	function La(t) {
		!za(this, t) && !this.__highByOuter && ka(this, Ca)
	}

	function Oa(t) {
		!za(this, t) && !this.__highByOuter && ka(this, Da)
	}

	function Ea(t) {
		this.__highByOuter |= 1 << (t || 0), ka(this, Ca)
	}

	function Ba(t) {
		!(this.__highByOuter &= ~(1 << (t || 0))) && ka(this, Da)
	}

	function za(t, e) {
		return t.__highDownSilentOnTouch && e.zrByTouch
	}

	function Ra(t, e) {
		Na(t, !0), ka(t, Pa, e)
	}

	function Na(t, e) {
		var n = e === !1;
		if (t.__highDownSilentOnTouch = t.highDownSilentOnTouch, t.__highDownOnUpdate = t.highDownOnUpdate, !n || t.__highDownDispatcher) {
			var i = n ? "off" : "on";
			t[i]("mouseover", La)[i]("mouseout", Oa), t[i]("emphasis", Ea)[i]("normal", Ba), t.__highByOuter = t.__highByOuter ||
				0, t.__highDownDispatcher = !n
		}
	}

	function Fa(t) {
		return !(!t || !t.__highDownDispatcher)
	}

	function Va(t) {
		var e = vy[t];
		return null == e && 32 >= gy && (e = vy[t] = gy++), e
	}

	function Ha(t, e, n, i, r, a, o) {
		r = r || hy;
		var s, l = r.labelFetcher,
			u = r.labelDataIndex,
			h = r.labelDimIndex,
			c = r.labelProp,
			d = n.getShallow("show"),
			f = i.getShallow("show");
		(d || f) && (l && (s = l.getFormattedLabel(u, "normal", null, h, c)), null == s && (s = w(r.defaultText) ? r.defaultText(
			u, r) : r.defaultText));
		var p = d ? s : null,
			g = f ? D(l ? l.getFormattedLabel(u, "emphasis", null, h, c) : null, s) : null;
		(null != p || null != g) && (Wa(t, n, a, r), Wa(e, i, o, r, !0)), t.text = p, e.text = g
	}

	function Ga(t, e, n) {
		var i = t.style;
		e && (Ka(i), t.setStyle(e), Za(i)), i = t.__hoverStl, n && i && (Ka(i), o(i, n), Za(i))
	}

	function Wa(t, e, n, i, r) {
		return Ua(t, e, i, r), n && o(t, n), t
	}

	function Xa(t, e, n) {
		var i, r = {
			isRectText: !0
		};
		n === !1 ? i = !0 : r.autoColor = n, Ua(t, e, r, i)
	}

	function Ua(t, e, n, i) {
		if (n = n || hy, n.isRectText) {
			var r;
			n.getTextPosition ? r = n.getTextPosition(e, i) : (r = e.getShallow("position") || (i ? null : "inside"), "outside" ===
				r && (r = "top")), t.textPosition = r, t.textOffset = e.getShallow("offset");
			var a = e.getShallow("rotate");
			null != a && (a *= Math.PI / 180), t.textRotation = a, t.textDistance = D(e.getShallow("distance"), i ? null : 5)
		}
		var o, s = e.ecModel,
			l = s && s.option.textStyle,
			u = Ya(e);
		if (u) {
			o = {};
			for (var h in u)
				if (u.hasOwnProperty(h)) {
					var c = e.getModel(["rich", h]);
					qa(o[h] = {}, c, l, n, i)
				}
		}
		return t.rich = o, qa(t, e, l, n, i, !0), n.forceRich && !n.textStyle && (n.textStyle = {}), t
	}

	function Ya(t) {
		for (var e; t && t !== t.ecModel;) {
			var n = (t.option || hy).rich;
			if (n) {
				e = e || {};
				for (var i in n) n.hasOwnProperty(i) && (e[i] = 1)
			}
			t = t.parentModel
		}
		return e
	}

	function qa(t, e, n, i, r, a) {
		n = !r && n || hy, t.textFill = ja(e.getShallow("color"), i) || n.color, t.textStroke = ja(e.getShallow(
				"textBorderColor"), i) || n.textBorderColor, t.textStrokeWidth = D(e.getShallow("textBorderWidth"), n.textBorderWidth),
			r || (a && (t.insideRollbackOpt = i, Za(t)), null == t.textFill && (t.textFill = i.autoColor)), t.fontStyle = e.getShallow(
				"fontStyle") || n.fontStyle, t.fontWeight = e.getShallow("fontWeight") || n.fontWeight, t.fontSize = e.getShallow(
				"fontSize") || n.fontSize, t.fontFamily = e.getShallow("fontFamily") || n.fontFamily, t.textAlign = e.getShallow(
				"align"), t.textVerticalAlign = e.getShallow("verticalAlign") || e.getShallow("baseline"), t.textLineHeight = e.getShallow(
				"lineHeight"), t.textWidth = e.getShallow("width"), t.textHeight = e.getShallow("height"), t.textTag = e.getShallow(
				"tag"), a && i.disableBox || (t.textBackgroundColor = ja(e.getShallow("backgroundColor"), i), t.textPadding = e.getShallow(
				"padding"), t.textBorderColor = ja(e.getShallow("borderColor"), i), t.textBorderWidth = e.getShallow(
				"borderWidth"), t.textBorderRadius = e.getShallow("borderRadius"), t.textBoxShadowColor = e.getShallow(
				"shadowColor"), t.textBoxShadowBlur = e.getShallow("shadowBlur"), t.textBoxShadowOffsetX = e.getShallow(
				"shadowOffsetX"), t.textBoxShadowOffsetY = e.getShallow("shadowOffsetY")), t.textShadowColor = e.getShallow(
				"textShadowColor") || n.textShadowColor, t.textShadowBlur = e.getShallow("textShadowBlur") || n.textShadowBlur, t.textShadowOffsetX =
			e.getShallow("textShadowOffsetX") || n.textShadowOffsetX, t.textShadowOffsetY = e.getShallow("textShadowOffsetY") ||
			n.textShadowOffsetY
	}

	function ja(t, e) {
		return "auto" !== t ? t : e && e.autoColor ? e.autoColor : null
	}

	function Za(t) {
		var e, n = t.textPosition,
			i = t.insideRollbackOpt;
		if (i && null == t.textFill) {
			var r = i.autoColor,
				a = i.isRectText,
				o = i.useInsideStyle,
				s = o !== !1 && (o === !0 || a && n && "string" == typeof n && n.indexOf("inside") >= 0),
				l = !s && null != r;
			(s || l) && (e = {
				textFill: t.textFill,
				textStroke: t.textStroke,
				textStrokeWidth: t.textStrokeWidth
			}), s && (t.textFill = "#fff", null == t.textStroke && (t.textStroke = r, null == t.textStrokeWidth && (t.textStrokeWidth =
				2))), l && (t.textFill = r)
		}
		t.insideRollback = e
	}

	function Ka(t) {
		var e = t.insideRollback;
		e && (t.textFill = e.textFill, t.textStroke = e.textStroke, t.textStrokeWidth = e.textStrokeWidth, t.insideRollback =
			null)
	}

	function $a(t, e) {
		var n = e && e.getModel("textStyle");
		return E([t.fontStyle || n && n.getShallow("fontStyle") || "", t.fontWeight || n && n.getShallow("fontWeight") || "",
			(t.fontSize || n && n.getShallow("fontSize") || 12) + "px", t.fontFamily || n && n.getShallow("fontFamily") ||
			"sans-serif"
		].join(" "))
	}

	function Qa(t, e, n, i, r, a) {
		"function" == typeof r && (a = r, r = null);
		var o = i && i.isAnimationEnabled();
		if (o) {
			var s = t ? "Update" : "",
				l = i.getShallow("animationDuration" + s),
				u = i.getShallow("animationEasing" + s),
				h = i.getShallow("animationDelay" + s);
			"function" == typeof h && (h = h(r, i.getAnimationDelayParams ? i.getAnimationDelayParams(e, r) : null)),
				"function" == typeof l && (l = l(r)), l > 0 ? e.animateTo(n, l, h || 0, u, a, !!a) : (e.stopAnimation(), e.attr(n),
					a && a())
		} else e.stopAnimation(), e.attr(n), a && a()
	}

	function Ja(t, e, n, i, r) {
		Qa(!0, t, e, n, i, r)
	}

	function to(t, e, n, i, r) {
		Qa(!1, t, e, n, i, r)
	}

	function eo(t, e) {
		for (var n = Oe([]); t && t !== e;) Be(n, t.getLocalTransform(), n), t = t.parent;
		return n
	}

	function no(t, e, n) {
		return e && !d(e) && (e = Zp.getLocalTransform(e)), n && (e = Fe([], e)), ae([], t, e)
	}

	function io(t, e, n) {
		var i = 0 === e[4] || 0 === e[5] || 0 === e[0] ? 1 : Math.abs(2 * e[4] / e[0]),
			r = 0 === e[4] || 0 === e[5] || 0 === e[2] ? 1 : Math.abs(2 * e[4] / e[2]),
			a = ["left" === t ? -i : "right" === t ? i : 0, "top" === t ? -r : "bottom" === t ? r : 0];
		return a = no(a, e, n), Math.abs(a[0]) > Math.abs(a[1]) ? a[0] > 0 ? "right" : "left" : a[1] > 0 ? "bottom" : "top"
	}

	function ro(t, e, n) {
		function i(t) {
			var e = {};
			return t.traverse(function(t) {
				!t.isGroup && t.anid && (e[t.anid] = t)
			}), e
		}

		function r(t) {
			var e = {
				position: W(t.position),
				rotation: t.rotation
			};
			return t.shape && (e.shape = o({}, t.shape)), e
		}
		if (t && e) {
			var a = i(t);
			e.traverse(function(t) {
				if (!t.isGroup && t.anid) {
					var e = a[t.anid];
					if (e) {
						var i = r(t);
						t.attr(r(e)), Ja(t, i, n, t.dataIndex)
					}
				}
			})
		}
	}

	function ao(t, e) {
		return p(t, function(t) {
			var n = t[0];
			n = ly(n, e.x), n = uy(n, e.x + e.width);
			var i = t[1];
			return i = ly(i, e.y), i = uy(i, e.y + e.height), [n, i]
		})
	}

	function oo(t, e) {
		var n = ly(t.x, e.x),
			i = uy(t.x + t.width, e.x + e.width),
			r = ly(t.y, e.y),
			a = uy(t.y + t.height, e.y + e.height);
		return i >= n && a >= r ? {
			x: n,
			y: r,
			width: i - n,
			height: a - r
		} : void 0
	}

	function so(t, e, n) {
		e = o({
			rectHover: !0
		}, e);
		var i = e.style = {
			strokeNoScale: !0
		};
		return n = n || {
			x: -1,
			y: -1,
			width: 2,
			height: 2
		}, t ? 0 === t.indexOf("image://") ? (i.image = t.slice(8), s(i, n), new Ci(e)) : ya(t.replace("path://", ""), e, n,
			"center") : void 0
	}

	function lo(t, e, n, i, r) {
		for (var a = 0, o = r[r.length - 1]; a < r.length; a++) {
			var s = r[a];
			if (uo(t, e, n, i, s[0], s[1], o[0], o[1])) return !0;
			o = s
		}
	}

	function uo(t, e, n, i, r, a, o, s) {
		var l = n - t,
			u = i - e,
			h = o - r,
			c = s - a,
			d = ho(h, c, l, u);
		if (co(d)) return !1;
		var f = t - r,
			p = e - a,
			g = ho(f, p, l, u) / d;
		if (0 > g || g > 1) return !1;
		var v = ho(f, p, h, c) / d;
		return 0 > v || v > 1 ? !1 : !0
	}

	function ho(t, e, n, i) {
		return t * i - n * e
	}

	function co(t) {
		return 1e-6 >= t && t >= -1e-6
	}

	function fo(t, e, n) {
		this.parentModel = e, this.ecModel = n, this.option = t
	}

	function po(t, e, n) {
		for (var i = 0; i < e.length && (!e[i] || (t = t && "object" == typeof t ? t[e[i]] : null, null != t)); i++);
		return null == t && n && (t = n.get(e)), t
	}

	function go(t, e) {
		var n = Ay(t).getParent;
		return n ? n.call(t, e) : t.parentModel
	}

	function vo(t) {
		return [t || "", Dy++, Math.random().toFixed(5)].join("_")
	}

	function mo(t) {
		var e = {};
		return t.registerSubTypeDefaulter = function(t, n) {
			t = pr(t), e[t.main] = n
		}, t.determineSubType = function(n, i) {
			var r = i.type;
			if (!r) {
				var a = pr(n).main;
				t.hasSubTypes(n) && e[a] && (r = e[a](i))
			}
			return r
		}, t
	}

	function yo(t, e) {
		function n(t) {
			var n = {},
				a = [];
			return f(t, function(o) {
				var s = i(n, o),
					l = s.originalDeps = e(o),
					h = r(l, t);
				s.entryCount = h.length, 0 === s.entryCount && a.push(o), f(h, function(t) {
					u(s.predecessor, t) < 0 && s.predecessor.push(t);
					var e = i(n, t);
					u(e.successor, t) < 0 && e.successor.push(o)
				})
			}), {
				graph: n,
				noEntryList: a
			}
		}

		function i(t, e) {
			return t[e] || (t[e] = {
				predecessor: [],
				successor: []
			}), t[e]
		}

		function r(t, e) {
			var n = [];
			return f(t, function(t) {
				u(e, t) >= 0 && n.push(t)
			}), n
		}
		t.topologicalTravel = function(t, e, i, r) {
			function a(t) {
				l[t].entryCount--, 0 === l[t].entryCount && u.push(t)
			}

			function o(t) {
				h[t] = !0, a(t)
			}
			if (t.length) {
				var s = n(e),
					l = s.graph,
					u = s.noEntryList,
					h = {};
				for (f(t, function(t) {
						h[t] = !0
					}); u.length;) {
					var c = u.pop(),
						d = l[c],
						p = !!h[c];
					p && (i.call(r, c, d.originalDeps.slice()), delete h[c]), f(d.successor, p ? o : a)
				}
				f(h, function() {
					throw new Error("Circle dependency may exists")
				})
			}
		}
	}

	function xo(t) {
		return t.replace(/^\s+|\s+$/g, "")
	}

	function _o(t, e, n, i) {
		var r = e[1] - e[0],
			a = n[1] - n[0];
		if (0 === r) return 0 === a ? n[0] : (n[0] + n[1]) / 2;
		if (i)
			if (r > 0) {
				if (t <= e[0]) return n[0];
				if (t >= e[1]) return n[1]
			} else {
				if (t >= e[0]) return n[0];
				if (t <= e[1]) return n[1]
			}
		else {
			if (t === e[0]) return n[0];
			if (t === e[1]) return n[1]
		}
		return (t - e[0]) / r * a + n[0]
	}

	function wo(t, e) {
		switch (t) {
			case "center":
			case "middle":
				t = "50%";
				break;
			case "left":
			case "top":
				t = "0%";
				break;
			case "right":
			case "bottom":
				t = "100%"
		}
		return "string" == typeof t ? xo(t).match(/%$/) ? parseFloat(t) / 100 * e : parseFloat(t) : null == t ? 0 / 0 : +t
	}

	function bo(t, e, n) {
		return null == e && (e = 10), e = Math.min(Math.max(0, e), 20), t = (+t).toFixed(e), n ? t : +t
	}

	function So(t) {
		return t.sort(function(t, e) {
			return t - e
		}), t
	}

	function Mo(t) {
		if (t = +t, isNaN(t)) return 0;
		for (var e = 1, n = 0; Math.round(t * e) / e !== t;) e *= 10, n++;
		return n
	}

	function Io(t) {
		var e = t.toString(),
			n = e.indexOf("e");
		if (n > 0) {
			var i = +e.slice(n + 1);
			return 0 > i ? -i : 0
		}
		var r = e.indexOf(".");
		return 0 > r ? 0 : e.length - 1 - r
	}

	function To(t, e) {
		var n = Math.log,
			i = Math.LN10,
			r = Math.floor(n(t[1] - t[0]) / i),
			a = Math.round(n(Math.abs(e[1] - e[0])) / i),
			o = Math.min(Math.max(-r + a, 0), 20);
		return isFinite(o) ? o : 20
	}

	function Co(t, e, n) {
		if (!t[e]) return 0;
		var i = g(t, function(t, e) {
			return t + (isNaN(e) ? 0 : e)
		}, 0);
		if (0 === i) return 0;
		for (var r = Math.pow(10, n), a = p(t, function(t) {
				return (isNaN(t) ? 0 : t) / i * r * 100
			}), o = 100 * r, s = p(a, function(t) {
				return Math.floor(t)
			}), l = g(s, function(t, e) {
				return t + e
			}, 0), u = p(a, function(t, e) {
				return t - s[e]
			}); o > l;) {
			for (var h = Number.NEGATIVE_INFINITY, c = null, d = 0, f = u.length; f > d; ++d) u[d] > h && (h = u[d], c = d);
			++s[c], u[c] = 0, ++l
		}
		return s[e] / r
	}

	function Ao(t) {
		var e = 2 * Math.PI;
		return (t % e + e) % e
	}

	function Do(t) {
		return t > -ky && ky > t
	}

	function ko(t) {
		if (t instanceof Date) return t;
		if ("string" == typeof t) {
			var e = Ly.exec(t);
			if (!e) return new Date(0 / 0);
			if (e[8]) {
				var n = +e[4] || 0;
				return "Z" !== e[8].toUpperCase() && (n -= e[8].slice(0, 3)), new Date(Date.UTC(+e[1], +(e[2] || 1) - 1, +e[3] ||
					1, n, +(e[5] || 0), +e[6] || 0, +e[7] || 0))
			}
			return new Date(+e[1], +(e[2] || 1) - 1, +e[3] || 1, +e[4] || 0, +(e[5] || 0), +e[6] || 0, +e[7] || 0)
		}
		return new Date(null == t ? 0 / 0 : Math.round(t))
	}

	function Po(t) {
		return Math.pow(10, Lo(t))
	}

	function Lo(t) {
		if (0 === t) return 0;
		var e = Math.floor(Math.log(t) / Math.LN10);
		return t / Math.pow(10, e) >= 10 && e++, e
	}

	function Oo(t, e) {
		var n, i = Lo(t),
			r = Math.pow(10, i),
			a = t / r;
		return n = e ? 1.5 > a ? 1 : 2.5 > a ? 2 : 4 > a ? 3 : 7 > a ? 5 : 10 : 1 > a ? 1 : 2 > a ? 2 : 3 > a ? 3 : 5 > a ?
			5 : 10, t = n * r, i >= -20 ? +t.toFixed(0 > i ? -i : 0) : t
	}

	function Eo(t, e) {
		var n = (t.length - 1) * e + 1,
			i = Math.floor(n),
			r = +t[i - 1],
			a = n - i;
		return a ? r + a * (t[i] - r) : r
	}

	function Bo(t) {
		function e(t, n, i) {
			return t.interval[i] < n.interval[i] || t.interval[i] === n.interval[i] && (t.close[i] - n.close[i] === (i ? -1 : 1) ||
				!i && e(t, n, 1))
		}
		t.sort(function(t, n) {
			return e(t, n, 0) ? -1 : 1
		});
		for (var n = -1 / 0, i = 1, r = 0; r < t.length;) {
			for (var a = t[r].interval, o = t[r].close, s = 0; 2 > s; s++) a[s] <= n && (a[s] = n, o[s] = s ? 1 : 1 - i), n = a[
				s], i = o[s];
			a[0] === a[1] && o[0] * o[1] !== 1 ? t.splice(r, 1) : r++
		}
		return t
	}

	function zo(t) {
		return t - parseFloat(t) >= 0
	}

	function Ro(t) {
		return isNaN(t) ? "-" : (t = (t + "").split("."), t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (t.length >
			1 ? "." + t[1] : ""))
	}

	function No(t, e) {
		return t = (t || "").toLowerCase().replace(/-(.)/g, function(t, e) {
			return e.toUpperCase()
		}), e && t && (t = t.charAt(0).toUpperCase() + t.slice(1)), t
	}

	function Fo(t) {
		return null == t ? "" : (t + "").replace(By, function(t, e) {
			return zy[e]
		})
	}

	function Vo(t, e, n) {
		_(e) || (e = [e]);
		var i = e.length;
		if (!i) return "";
		for (var r = e[0].$vars || [], a = 0; a < r.length; a++) {
			var o = Ry[a];
			t = t.replace(Ny(o), Ny(o, 0))
		}
		for (var s = 0; i > s; s++)
			for (var l = 0; l < r.length; l++) {
				var u = e[s][r[l]];
				t = t.replace(Ny(Ry[l], s), n ? Fo(u) : u)
			}
		return t
	}

	function Ho(t, e, n) {
		return f(e, function(e, i) {
			t = t.replace("{" + i + "}", n ? Fo(e) : e)
		}), t
	}

	function Go(t, e) {
		t = b(t) ? {
			color: t,
			extraCssText: e
		} : t || {};
		var n = t.color,
			i = t.type,
			e = t.extraCssText,
			r = t.renderMode || "html",
			a = t.markerId || "X";
		return n ? "html" === r ? "subItem" === i ?
			'<span style="display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;border-radius:4px;width:4px;height:4px;background-color:' +
			Fo(n) + ";" + (e || "") + '"></span>' :
			'<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:' +
			Fo(n) + ";" + (e || "") + '"></span>' : {
				renderMode: r,
				content: "{marker" + a + "|}  ",
				style: {
					color: n
				}
			} : ""
	}

	function Wo(t, e) {
		return t += "", "0000".substr(0, e - t.length) + t
	}

	function Xo(t, e, n) {
		("week" === t || "month" === t || "quarter" === t || "half-year" === t || "year" === t) && (t = "MM-dd\nyyyy");
		var i = ko(e),
			r = n ? "UTC" : "",
			a = i["get" + r + "FullYear"](),
			o = i["get" + r + "Month"]() + 1,
			s = i["get" + r + "Date"](),
			l = i["get" + r + "Hours"](),
			u = i["get" + r + "Minutes"](),
			h = i["get" + r + "Seconds"](),
			c = i["get" + r + "Milliseconds"]();
		return t = t.replace("MM", Wo(o, 2)).replace("M", o).replace("yyyy", a).replace("yy", a % 100).replace("dd", Wo(s, 2))
			.replace("d", s).replace("hh", Wo(l, 2)).replace("h", l).replace("mm", Wo(u, 2)).replace("m", u).replace("ss", Wo(h,
				2)).replace("s", h).replace("SSS", Wo(c, 3))
	}

	function Uo(t) {
		return t ? t.charAt(0).toUpperCase() + t.substr(1) : t
	}

	function Yo(t) {
		return Un(t.text, t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.textLineHeight, t.rich, t.truncate)
	}

	function qo(t, e, n, i, r, a, o, s) {
		return Un(t, e, n, i, r, s, a, o)
	}

	function jo(t, e) {
		if ("_blank" === e || "blank" === e) {
			var n = window.open();
			n.opener = null, n.location = t
		} else window.open(t, e)
	}

	function Zo(t, e, n, i, r) {
		var a = 0,
			o = 0;
		null == i && (i = 1 / 0), null == r && (r = 1 / 0);
		var s = 0;
		e.eachChild(function(l, u) {
			var h, c, d = l.position,
				f = l.getBoundingRect(),
				p = e.childAt(u + 1),
				g = p && p.getBoundingRect();
			if ("horizontal" === t) {
				var v = f.width + (g ? -g.x + f.x : 0);
				h = a + v, h > i || l.newline ? (a = 0, h = v, o += s + n, s = f.height) : s = Math.max(s, f.height)
			} else {
				var m = f.height + (g ? -g.y + f.y : 0);
				c = o + m, c > r || l.newline ? (a += s + n, o = 0, c = m, s = f.width) : s = Math.max(s, f.width)
			}
			l.newline || (d[0] = a, d[1] = o, "horizontal" === t ? a = h + n : o = c + n)
		})
	}

	function Ko(t, e, n) {
		n = Ey(n || 0);
		var i = e.width,
			r = e.height,
			a = wo(t.left, i),
			o = wo(t.top, r),
			s = wo(t.right, i),
			l = wo(t.bottom, r),
			u = wo(t.width, i),
			h = wo(t.height, r),
			c = n[2] + n[0],
			d = n[1] + n[3],
			f = t.aspect;
		switch (isNaN(u) && (u = i - s - d - a), isNaN(h) && (h = r - l - c - o), null != f && (isNaN(u) && isNaN(h) && (f >
			i / r ? u = .8 * i : h = .8 * r), isNaN(u) && (u = f * h), isNaN(h) && (h = u / f)), isNaN(a) && (a = i - s - u -
			d), isNaN(o) && (o = r - l - h - c), t.left || t.right) {
			case "center":
				a = i / 2 - u / 2 - n[3];
				break;
			case "right":
				a = i - u - d
		}
		switch (t.top || t.bottom) {
			case "middle":
			case "center":
				o = r / 2 - h / 2 - n[0];
				break;
			case "bottom":
				o = r - h - c
		}
		a = a || 0, o = o || 0, isNaN(u) && (u = i - d - a - (s || 0)), isNaN(h) && (h = r - c - o - (l || 0));
		var p = new Tn(a + n[3], o + n[0], u, h);
		return p.margin = n, p
	}

	function $o(t, e, n) {
		function i(n, i) {
			var o = {},
				l = 0,
				u = {},
				h = 0,
				c = 2;
			if (Hy(n, function(e) {
					u[e] = t[e]
				}), Hy(n, function(t) {
					r(e, t) && (o[t] = u[t] = e[t]), a(o, t) && l++, a(u, t) && h++
				}), s[i]) return a(e, n[1]) ? u[n[2]] = null : a(e, n[2]) && (u[n[1]] = null), u;
			if (h !== c && l) {
				if (l >= c) return o;
				for (var d = 0; d < n.length; d++) {
					var f = n[d];
					if (!r(o, f) && r(t, f)) {
						o[f] = t[f];
						break
					}
				}
				return o
			}
			return u
		}

		function r(t, e) {
			return t.hasOwnProperty(e)
		}

		function a(t, e) {
			return null != t[e] && "auto" !== t[e]
		}

		function o(t, e, n) {
			Hy(t, function(t) {
				e[t] = n[t]
			})
		}!S(n) && (n = {});
		var s = n.ignoreSize;
		!_(s) && (s = [s, s]);
		var l = i(Wy[0], 0),
			u = i(Wy[1], 1);
		o(Wy[0], t, l), o(Wy[1], t, u)
	}

	function Qo(t) {
		return Jo({}, t)
	}

	function Jo(t, e) {
		return e && t && Hy(Gy, function(n) {
			e.hasOwnProperty(n) && (t[n] = e[n])
		}), t
	}

	function ts(t) {
		var e = [];
		return f(qy.getClassesByMainType(t), function(t) {
			e = e.concat(t.prototype.dependencies || [])
		}), e = p(e, function(t) {
			return pr(t).main
		}), "dataset" !== t && u(e, "dataset") <= 0 && e.unshift("dataset"), e
	}

	function es(t, e) {
		for (var n = t.length, i = 0; n > i; i++)
			if (t[i].length > e) return t[i];
		return t[n - 1]
	}

	function ns(t) {
		this.fromDataset = t.fromDataset, this.data = t.data || (t.sourceFormat === ex ? {} : []), this.sourceFormat = t.sourceFormat ||
			nx, this.seriesLayoutBy = t.seriesLayoutBy || rx, this.dimensionsDefine = t.dimensionsDefine, this.encodeDefine = t
			.encodeDefine && N(t.encodeDefine), this.startIndex = t.startIndex || 0, this.dimensionsDetectCount = t.dimensionsDetectCount
	}

	function is(t) {
		var e = t.option.source,
			n = nx;
		if (I(e)) n = ix;
		else if (_(e)) {
			0 === e.length && (n = Jy);
			for (var i = 0, r = e.length; r > i; i++) {
				var a = e[i];
				if (null != a) {
					if (_(a)) {
						n = Jy;
						break
					}
					if (S(a)) {
						n = tx;
						break
					}
				}
			}
		} else if (S(e)) {
			for (var o in e)
				if (e.hasOwnProperty(o) && d(e[o])) {
					n = ex;
					break
				}
		} else if (null != e) throw new Error("Invalid data");
		sx(t).sourceFormat = n
	}

	function rs(t) {
		return sx(t).source
	}

	function as(t) {
		sx(t).datasetMap = N()
	}

	function os(t) {
		var e = t.option,
			n = e.data,
			i = I(n) ? ix : Qy,
			r = !1,
			a = e.seriesLayoutBy,
			o = e.sourceHeader,
			s = e.dimensions,
			l = fs(t);
		if (l) {
			var u = l.option;
			n = u.source, i = sx(l).sourceFormat, r = !0, a = a || u.seriesLayoutBy, null == o && (o = u.sourceHeader), s = s ||
				u.dimensions
		}
		var h = ss(n, i, a, o, s);
		sx(t).source = new ns({
			data: n,
			fromDataset: r,
			seriesLayoutBy: a,
			sourceFormat: i,
			dimensionsDefine: h.dimensionsDefine,
			startIndex: h.startIndex,
			dimensionsDetectCount: h.dimensionsDetectCount,
			encodeDefine: e.encode
		})
	}

	function ss(t, e, n, i, r) {
		if (!t) return {
			dimensionsDefine: ls(r)
		};
		var a, o;
		if (e === Jy) "auto" === i || null == i ? us(function(t) {
			null != t && "-" !== t && (b(t) ? null == o && (o = 1) : o = 0)
		}, n, t, 10) : o = i ? 1 : 0, r || 1 !== o || (r = [], us(function(t, e) {
			r[e] = null != t ? t : ""
		}, n, t)), a = r ? r.length : n === ax ? t.length : t[0] ? t[0].length : null;
		else if (e === tx) r || (r = hs(t));
		else if (e === ex) r || (r = [], f(t, function(t, e) {
			r.push(e)
		}));
		else if (e === Qy) {
			var s = er(t[0]);
			a = _(s) && s.length || 1
		} else e === ix && op && O(!!r, "dimensions must be given if data is TypedArray.");
		return {
			startIndex: o,
			dimensionsDefine: ls(r),
			dimensionsDetectCount: a
		}
	}

	function ls(t) {
		if (t) {
			var e = N();
			return p(t, function(t) {
				if (t = o({}, S(t) ? t : {
						name: t
					}), null == t.name) return t;
				t.name += "", null == t.displayName && (t.displayName = t.name);
				var n = e.get(t.name);
				return n ? t.name += "-" + n.count++ : e.set(t.name, {
					count: 1
				}), t
			})
		}
	}

	function us(t, e, n, i) {
		if (null == i && (i = 1 / 0), e === ax)
			for (var r = 0; r < n.length && i > r; r++) t(n[r] ? n[r][0] : null, r);
		else
			for (var a = n[0] || [], r = 0; r < a.length && i > r; r++) t(a[r], r)
	}

	function hs(t) {
		for (var e, n = 0; n < t.length && !(e = t[n++]););
		if (e) {
			var i = [];
			return f(e, function(t, e) {
				i.push(e)
			}), i
		}
	}

	function cs(t, e, n) {
		function i(t, e, n) {
			for (var i = 0; n > i; i++) t.push(e + i)
		}

		function r(t) {
			var e = t.dimsDef;
			return e ? e.length : 1
		}
		var a = {},
			o = fs(e);
		if (!o || !t) return a;
		var s, l, u = [],
			h = [],
			c = e.ecModel,
			d = sx(c).datasetMap,
			p = o.uid + "_" + n.seriesLayoutBy;
		t = t.slice(), f(t, function(e, n) {
			!S(e) && (t[n] = {
				name: e
			}), "ordinal" === e.type && null == s && (s = n, l = r(t[n])), a[e.name] = []
		});
		var g = d.get(p) || d.set(p, {
			categoryWayDim: l,
			valueWayDim: 0
		});
		return f(t, function(t, e) {
			var n = t.name,
				o = r(t);
			if (null == s) {
				var l = g.valueWayDim;
				i(a[n], l, o), i(h, l, o), g.valueWayDim += o
			} else if (s === e) i(a[n], 0, o), i(u, 0, o);
			else {
				var l = g.categoryWayDim;
				i(a[n], l, o), i(h, l, o), g.categoryWayDim += o
			}
		}), u.length && (a.itemName = u), h.length && (a.seriesName = h), a
	}

	function ds(t, e, n) {
		var i = {},
			r = fs(t);
		if (!r) return i;
		var a, o = e.sourceFormat,
			s = e.dimensionsDefine;
		(o === tx || o === ex) && f(s, function(t, e) {
			"name" === (S(t) ? t.name : t) && (a = e)
		});
		var l = function() {
			function t(t) {
				return null != t.v && null != t.n
			}
			for (var i = {}, r = {}, l = [], u = 0, h = Math.min(5, n); h > u; u++) {
				var c = gs(e.data, o, e.seriesLayoutBy, s, e.startIndex, u);
				l.push(c);
				var d = c === ox.Not;
				if (d && null == i.v && u !== a && (i.v = u), (null == i.n || i.n === i.v || !d && l[i.n] === ox.Not) && (i.n = u),
					t(i) && l[i.n] !== ox.Not) return i;
				d || (c === ox.Might && null == r.v && u !== a && (r.v = u), (null == r.n || r.n === r.v) && (r.n = u))
			}
			return t(i) ? i : t(r) ? r : null
		}();
		if (l) {
			i.value = l.v;
			var u = null != a ? a : l.n;
			i.itemName = [u], i.seriesName = [u]
		}
		return i
	}

	function fs(t) {
		var e = t.option,
			n = e.data;
		return n ? void 0 : t.ecModel.getComponent("dataset", e.datasetIndex || 0)
	}

	function ps(t, e) {
		return gs(t.data, t.sourceFormat, t.seriesLayoutBy, t.dimensionsDefine, t.startIndex, e)
	}

	function gs(t, e, n, i, r, a) {
		function o(t) {
			var e = b(t);
			return null != t && isFinite(t) && "" !== t ? e ? ox.Might : ox.Not : e && "-" !== t ? ox.Must : void 0
		}
		var s, l = 5;
		if (I(t)) return ox.Not;
		var u, h;
		if (i) {
			var c = i[a];
			S(c) ? (u = c.name, h = c.type) : b(c) && (u = c)
		}
		if (null != h) return "ordinal" === h ? ox.Must : ox.Not;
		if (e === Jy)
			if (n === ax) {
				for (var d = t[a], f = 0; f < (d || []).length && l > f; f++)
					if (null != (s = o(d[r + f]))) return s
			} else
				for (var f = 0; f < t.length && l > f; f++) {
					var p = t[r + f];
					if (p && null != (s = o(p[a]))) return s
				} else if (e === tx) {
					if (!u) return ox.Not;
					for (var f = 0; f < t.length && l > f; f++) {
						var g = t[f];
						if (g && null != (s = o(g[u]))) return s
					}
				} else if (e === ex) {
			if (!u) return ox.Not;
			var d = t[u];
			if (!d || I(d)) return ox.Not;
			for (var f = 0; f < d.length && l > f; f++)
				if (null != (s = o(d[f]))) return s
		} else if (e === Qy)
			for (var f = 0; f < t.length && l > f; f++) {
				var g = t[f],
					v = er(g);
				if (!_(v)) return ox.Not;
				if (null != (s = o(v[a]))) return s
			}
		return ox.Not
	}

	function vs(t, e) {
		if (e) {
			var n = e.seiresIndex,
				i = e.seriesId,
				r = e.seriesName;
			return null != n && t.componentIndex !== n || null != i && t.id !== i || null != r && t.name !== r
		}
	}

	function ms(t, e) {
		var n = t.color && !t.colorLayer;
		f(e, function(e, a) {
			"colorLayer" === a && n || qy.hasClass(a) || ("object" == typeof e ? t[a] = t[a] ? r(t[a], e, !1) : i(e) : null ==
				t[a] && (t[a] = e))
		})
	}

	function ys(t) {
		t = t, this.option = {}, this.option[lx] = 1, this._componentsMap = N({
			series: []
		}), this._seriesIndices, this._seriesIndicesMap, ms(t, this._theme.option), r(t, Zy, !1), this.mergeOption(t)
	}

	function xs(t, e) {
		_(e) || (e = e ? [e] : []);
		var n = {};
		return f(e, function(e) {
			n[e] = (t.get(e) || []).slice()
		}), n
	}

	function _s(t, e, n) {
		var i = e.type ? e.type : n ? n.subType : qy.determineSubType(t, e);
		return i
	}

	function ws(t, e) {
		t._seriesIndicesMap = N(t._seriesIndices = p(e, function(t) {
			return t.componentIndex
		}) || [])
	}

	function bs(t, e) {
		return e.hasOwnProperty("subType") ? v(t, function(t) {
			return t.subType === e.subType
		}) : t
	}

	function Ss(t) {
		if (op && !t._seriesIndices) throw new Error("Option should contains series.")
	}

	function Ms(t) {
		f(hx, function(e) {
			this[e] = y(t[e], t)
		}, this)
	}

	function Is() {
		this._coordinateSystems = []
	}

	function Ts(t) {
		this._api = t, this._timelineOptions = [], this._mediaList = [], this._mediaDefault, this._currentMediaIndices = [],
			this._optionBackup, this._newBaseOption
	}

	function Cs(t, e, n) {
		var i, r, a = [],
			o = [],
			s = t.timeline;
		if (t.baseOption && (r = t.baseOption), (s || t.options) && (r = r || {}, a = (t.options || []).slice()), t.media) {
			r = r || {};
			var l = t.media;
			dx(l, function(t) {
				t && t.option && (t.query ? o.push(t) : i || (i = t))
			})
		}
		return r || (r = t), r.timeline || (r.timeline = s), dx([r].concat(a).concat(p(o, function(t) {
			return t.option
		})), function(t) {
			dx(e, function(e) {
				e(t, n)
			})
		}), {
			baseOption: r,
			timelineOptions: a,
			mediaDefault: i,
			mediaList: o
		}
	}

	function As(t, e, n) {
		var i = {
				width: e,
				height: n,
				aspectratio: e / n
			},
			r = !0;
		return f(t, function(t, e) {
			var n = e.match(vx);
			if (n && n[1] && n[2]) {
				var a = n[1],
					o = n[2].toLowerCase();
				Ds(i[o], t, a) || (r = !1)
			}
		}), r
	}

	function Ds(t, e, n) {
		return "min" === n ? t >= e : "max" === n ? e >= t : t === e
	}

	function ks(t, e) {
		return t.join(",") === e.join(",")
	}

	function Ps(t, e) {
		e = e || {}, dx(e, function(e, n) {
			if (null != e) {
				var i = t[n];
				if (qy.hasClass(n)) {
					e = Ji(e), i = Ji(i);
					var r = ir(i, e);
					t[n] = px(r, function(t) {
						return t.option && t.exist ? gx(t.exist, t.option, !0) : t.exist || t.option
					})
				} else t[n] = gx(i, e, !0)
			}
		})
	}

	function Ls(t) {
		var e = t && t.itemStyle;
		if (e)
			for (var n = 0, i = xx.length; i > n; n++) {
				var a = xx[n],
					o = e.normal,
					s = e.emphasis;
				o && o[a] && (t[a] = t[a] || {}, t[a].normal ? r(t[a].normal, o[a]) : t[a].normal = o[a], o[a] = null), s && s[a] &&
					(t[a] = t[a] || {}, t[a].emphasis ? r(t[a].emphasis, s[a]) : t[a].emphasis = s[a], s[a] = null)
			}
	}

	function Os(t, e, n) {
		if (t && t[e] && (t[e].normal || t[e].emphasis)) {
			var i = t[e].normal,
				r = t[e].emphasis;
			i && (n ? (t[e].normal = t[e].emphasis = null, s(t[e], i)) : t[e] = i), r && (t.emphasis = t.emphasis || {}, t.emphasis[
				e] = r)
		}
	}

	function Es(t) {
		Os(t, "itemStyle"), Os(t, "lineStyle"), Os(t, "areaStyle"), Os(t, "label"), Os(t, "labelLine"), Os(t, "upperLabel"),
			Os(t, "edgeLabel")
	}

	function Bs(t, e) {
		var n = yx(t) && t[e],
			i = yx(n) && n.textStyle;
		if (i)
			for (var r = 0, a = Cv.length; a > r; r++) {
				var e = Cv[r];
				i.hasOwnProperty(e) && (n[e] = i[e])
			}
	}

	function zs(t) {
		t && (Es(t), Bs(t, "label"), t.emphasis && Bs(t.emphasis, "label"))
	}

	function Rs(t) {
		if (yx(t)) {
			Ls(t), Es(t), Bs(t, "label"), Bs(t, "upperLabel"), Bs(t, "edgeLabel"), t.emphasis && (Bs(t.emphasis, "label"), Bs(t
				.emphasis, "upperLabel"), Bs(t.emphasis, "edgeLabel"));
			var e = t.markPoint;
			e && (Ls(e), zs(e));
			var n = t.markLine;
			n && (Ls(n), zs(n));
			var i = t.markArea;
			i && zs(i);
			var r = t.data;
			if ("graph" === t.type) {
				r = r || t.nodes;
				var a = t.links || t.edges;
				if (a && !I(a))
					for (var o = 0; o < a.length; o++) zs(a[o]);
				f(t.categories, function(t) {
					Es(t)
				})
			}
			if (r && !I(r))
				for (var o = 0; o < r.length; o++) zs(r[o]);
			var e = t.markPoint;
			if (e && e.data)
				for (var s = e.data, o = 0; o < s.length; o++) zs(s[o]);
			var n = t.markLine;
			if (n && n.data)
				for (var l = n.data, o = 0; o < l.length; o++) _(l[o]) ? (zs(l[o][0]), zs(l[o][1])) : zs(l[o]);
			"gauge" === t.type ? (Bs(t, "axisLabel"), Bs(t, "title"), Bs(t, "detail")) : "treemap" === t.type ? (Os(t.breadcrumb,
				"itemStyle"), f(t.levels, function(t) {
				Es(t)
			})) : "tree" === t.type && Es(t.leaves)
		}
	}

	function Ns(t) {
		return _(t) ? t : t ? [t] : []
	}

	function Fs(t) {
		return (_(t) ? t[0] : t) || {}
	}

	function Vs(t, e) {
		e = e.split(",");
		for (var n = t, i = 0; i < e.length && (n = n && n[e[i]], null != n); i++);
		return n
	}

	function Hs(t, e, n, i) {
		e = e.split(",");
		for (var r, a = t, o = 0; o < e.length - 1; o++) r = e[o], null == a[r] && (a[r] = {}), a = a[r];
		(i || null == a[e[o]]) && (a[e[o]] = n)
	}

	function Gs(t) {
		f(bx, function(e) {
			e[0] in t && !(e[1] in t) && (t[e[1]] = t[e[0]])
		})
	}

	function Ws(t) {
		f(t, function(e, n) {
			var i = [],
				r = [0 / 0, 0 / 0],
				a = [e.stackResultDimension, e.stackedOverDimension],
				o = e.data,
				s = e.isStackedByIndex,
				l = o.map(a, function(a, l, u) {
					var h = o.get(e.stackedDimension, u);
					if (isNaN(h)) return r;
					var c, d;
					s ? d = o.getRawIndex(u) : c = o.get(e.stackedByDimension, u);
					for (var f = 0 / 0, p = n - 1; p >= 0; p--) {
						var g = t[p];
						if (s || (d = g.data.rawIndexOf(g.stackedByDimension, c)), d >= 0) {
							var v = g.data.getByRawIndex(g.stackResultDimension, d);
							if (h >= 0 && v > 0 || 0 >= h && 0 > v) {
								h += v, f = v;
								break
							}
						}
					}
					return i[0] = h, i[1] = f, i
				});
			o.hostModel.setData(l), e.data = l
		})
	}

	function Xs(t, e) {
		ns.isInstance(t) || (t = ns.seriesDataToSource(t)), this._source = t;
		var n = this._data = t.data,
			i = t.sourceFormat;
		if (i === ix) {
			if (op && null == e) throw new Error("Typed array data must specify dimension size");
			this._offset = 0, this._dimSize = e, this._data = n
		}
		var r = Cx[i === Jy ? i + "_" + t.seriesLayoutBy : i];
		op && O(r, "Invalide sourceFormat: " + i), o(this, r)
	}

	function Us() {
		return this._data.length
	}

	function Ys(t) {
		return this._data[t]
	}

	function qs(t) {
		for (var e = 0; e < t.length; e++) this._data.push(t[e])
	}

	function js(t, e, n) {
		return null != n ? t[n] : t
	}

	function Zs(t, e, n, i) {
		return Ks(t[i], this._dimensionInfos[e])
	}

	function Ks(t, e) {
		var n = e && e.type;
		if ("ordinal" === n) {
			var i = e && e.ordinalMeta;
			return i ? i.parseAndCollect(t) : t
		}
		return "time" === n && "number" != typeof t && null != t && "-" !== t && (t = +ko(t)), null == t || "" === t ? 0 / 0 :
			+t
	}

	function $s(t, e, n) {
		if (t) {
			var i = t.getRawDataItem(e);
			if (null != i) {
				var r, a, o = t.getProvider().getSource().sourceFormat,
					s = t.getDimensionInfo(n);
				return s && (r = s.name, a = s.index), Ax[o](i, e, a, r)
			}
		}
	}

	function Qs(t, e, n) {
		if (t) {
			var i = t.getProvider().getSource().sourceFormat;
			if (i === Qy || i === tx) {
				var r = t.getRawDataItem(e);
				return i !== Qy || S(r) || (r = null), r ? r[n] : void 0
			}
		}
	}

	function Js(t) {
		return new tl(t)
	}

	function tl(t) {
		t = t || {}, this._reset = t.reset, this._plan = t.plan, this._count = t.count, this._onDirty = t.onDirty, this._dirty = !
			0, this.context
	}

	function el(t, e, n, i, r, a) {
		Ox.reset(n, i, r, a), t._callingProgress = e, t._callingProgress({
			start: n,
			end: i,
			count: i - n,
			next: Ox.next
		}, t.context)
	}

	function nl(t, e) {
		t._dueIndex = t._outputDueEnd = t._dueEnd = 0, t._settedOutputEnd = null;
		var n, i;
		!e && t._reset && (n = t._reset(t.context), n && n.progress && (i = n.forceFirstProgress, n = n.progress), _(n) && !
			n.length && (n = null)), t._progress = n, t._modBy = t._modDataCount = null;
		var r = t._downstream;
		return r && r.dirty(), i
	}

	function il(t) {
		var e = t.name;
		ar(t) || (t.name = rl(t) || e)
	}

	function rl(t) {
		var e = t.getRawData(),
			n = e.mapDimension("seriesName", !0),
			i = [];
		return f(n, function(t) {
			var n = e.getDimensionInfo(t);
			n.displayName && i.push(n.displayName)
		}), i.join(" ")
	}

	function al(t) {
		return t.model.getRawData().count()
	}

	function ol(t) {
		var e = t.model;
		return e.setData(e.getRawData().cloneShallow()), sl
	}

	function sl(t, e) {
		e.outputData && t.end > e.outputData.count() && e.model.getRawData().cloneShallow(e.outputData)
	}

	function ll(t, e) {
		f(t.CHANGABLE_METHODS, function(n) {
			t.wrapMethod(n, x(ul, e))
		})
	}

	function ul(t) {
		var e = hl(t);
		e && e.setOutputEnd(this.count())
	}

	function hl(t) {
		var e = (t.ecModel || {}).scheduler,
			n = e && e.getPipeline(t.uid);
		if (n) {
			var i = n.currentTask;
			if (i) {
				var r = i.agentStubMap;
				r && (i = r.get(t.uid))
			}
			return i
		}
	}

	function cl() {
		this.group = new Mg, this.uid = vo("viewChart"), this.renderTask = Js({
			plan: pl,
			reset: gl
		}), this.renderTask.context = {
			view: this
		}
	}

	function dl(t, e, n) {
		if (t && (t.trigger(e, n), t.isGroup && !Fa(t)))
			for (var i = 0, r = t.childCount(); r > i; i++) dl(t.childAt(i), e, n)
	}

	function fl(t, e, n) {
		var i = sr(t, e),
			r = e && null != e.highlightKey ? Va(e.highlightKey) : null;
		null != i ? f(Ji(i), function(e) {
			dl(t.getItemGraphicEl(e), n, r)
		}) : t.eachItemGraphicEl(function(t) {
			dl(t, n, r)
		})
	}

	function pl(t) {
		return Vx(t.model)
	}

	function gl(t) {
		var e = t.model,
			n = t.ecModel,
			i = t.api,
			r = t.payload,
			a = e.pipelineContext.progressiveRender,
			o = t.view,
			s = r && Fx(r).updateMethod,
			l = a ? "incrementalPrepareRender" : s && o[s] ? s : "render";
		return "render" !== l && o[l](e, n, i, r), Gx[l]
	}

	function vl(t, e, n) {
		function i() {
			h = (new Date).getTime(), c = null, t.apply(o, s || [])
		}
		var r, a, o, s, l, u = 0,
			h = 0,
			c = null;
		e = e || 0;
		var d = function() {
			r = (new Date).getTime(), o = this, s = arguments;
			var t = l || e,
				d = l || n;
			l = null, a = r - (d ? u : h) - t, clearTimeout(c), d ? c = setTimeout(i, t) : a >= 0 ? i() : c = setTimeout(i, -a),
				u = r
		};
		return d.clear = function() {
			c && (clearTimeout(c), c = null)
		}, d.debounceNextCall = function(t) {
			l = t
		}, d
	}

	function ml(t, e, n, i) {
		var r = t[e];
		if (r) {
			var a = r[Wx] || r,
				o = r[Ux],
				s = r[Xx];
			if (s !== n || o !== i) {
				if (null == n || !i) return t[e] = a;
				r = t[e] = vl(a, n, "debounce" === i), r[Wx] = a, r[Ux] = i, r[Xx] = n
			}
			return r
		}
	}

	function yl(t, e, n, i) {
		this.ecInstance = t, this.api = e, this.unfinished;
		var n = this._dataProcessorHandlers = n.slice(),
			i = this._visualHandlers = i.slice();
		this._allHandlers = n.concat(i), this._stageTaskMap = N()
	}

	function xl(t, e, n, i, r) {
		function a(t, e) {
			return t.setDirty && (!t.dirtyMap || t.dirtyMap.get(e.__pipeline.id))
		}
		r = r || {};
		var o;
		f(e, function(e) {
			if (!r.visualType || r.visualType === e.visualType) {
				var s = t._stageTaskMap.get(e.uid),
					l = s.seriesTaskMap,
					u = s.overallTask;
				if (u) {
					var h, c = u.agentStubMap;
					c.each(function(t) {
						a(r, t) && (t.dirty(), h = !0)
					}), h && u.dirty(), Qx(u, i);
					var d = t.getPerformArgs(u, r.block);
					c.each(function(t) {
						t.perform(d)
					}), o |= u.perform(d)
				} else l && l.each(function(s) {
					a(r, s) && s.dirty();
					var l = t.getPerformArgs(s, r.block);
					l.skip = !e.performRawSeries && n.isSeriesFiltered(s.context.model), Qx(s, i), o |= s.perform(l)
				})
			}
		}), t.unfinished |= o
	}

	function _l(t, e, n, i, r) {
		function a(n) {
			var a = n.uid,
				s = o.get(a) || o.set(a, Js({
					plan: Tl,
					reset: Cl,
					count: Dl
				}));
			s.context = {
				model: n,
				ecModel: i,
				api: r,
				useClearVisual: e.isVisual && !e.isLayout,
				plan: e.plan,
				reset: e.reset,
				scheduler: t
			}, kl(t, n, s)
		}
		var o = n.seriesTaskMap || (n.seriesTaskMap = N()),
			s = e.seriesType,
			l = e.getTargetSeries;
		e.createOnAllSeries ? i.eachRawSeries(a) : s ? i.eachRawSeriesByType(s, a) : l && l(i, r).each(a);
		var u = t._pipelineMap;
		o.each(function(t, e) {
			u.get(e) || (t.dispose(), o.removeKey(e))
		})
	}

	function wl(t, e, n, i, r) {
		function a(e) {
			var n = e.uid,
				i = s.get(n);
			i || (i = s.set(n, Js({
				reset: Sl,
				onDirty: Il
			})), o.dirty()), i.context = {
				model: e,
				overallProgress: h,
				modifyOutputEnd: c
			}, i.agent = o, i.__block = h, kl(t, e, i)
		}
		var o = n.overallTask = n.overallTask || Js({
			reset: bl
		});
		o.context = {
			ecModel: i,
			api: r,
			overallReset: e.overallReset,
			scheduler: t
		};
		var s = o.agentStubMap = o.agentStubMap || N(),
			l = e.seriesType,
			u = e.getTargetSeries,
			h = !0,
			c = e.modifyOutputEnd;
		l ? i.eachRawSeriesByType(l, a) : u ? u(i, r).each(a) : (h = !1, f(i.getSeries(), a));
		var d = t._pipelineMap;
		s.each(function(t, e) {
			d.get(e) || (t.dispose(), o.dirty(), s.removeKey(e))
		})
	}

	function bl(t) {
		t.overallReset(t.ecModel, t.api, t.payload)
	}

	function Sl(t) {
		return t.overallProgress && Ml
	}

	function Ml() {
		this.agent.dirty(), this.getDownstream().dirty()
	}

	function Il() {
		this.agent && this.agent.dirty()
	}

	function Tl(t) {
		return t.plan && t.plan(t.model, t.ecModel, t.api, t.payload)
	}

	function Cl(t) {
		t.useClearVisual && t.data.clearAllVisual();
		var e = t.resetDefines = Ji(t.reset(t.model, t.ecModel, t.api, t.payload));
		return e.length > 1 ? p(e, function(t, e) {
			return Al(e)
		}) : Jx
	}

	function Al(t) {
		return function(e, n) {
			var i = n.data,
				r = n.resetDefines[t];
			if (r && r.dataEach)
				for (var a = e.start; a < e.end; a++) r.dataEach(i, a);
			else r && r.progress && r.progress(e, i)
		}
	}

	function Dl(t) {
		return t.data.count()
	}

	function kl(t, e, n) {
		var i = e.uid,
			r = t._pipelineMap.get(i);
		!r.head && (r.head = n), r.tail && r.tail.pipe(n), r.tail = n, n.__idxInPipeline = r.count++, n.__pipeline = r
	}

	function Pl(t) {
		t_ = null;
		try {
			t(e_, n_)
		} catch (e) {}
		return t_
	}

	function Ll(t, e) {
		for (var n in e.prototype) t[n] = V
	}

	function Ol(t) {
		if (b(t)) {
			var e = new DOMParser;
			t = e.parseFromString(t, "text/xml")
		}
		for (9 === t.nodeType && (t = t.firstChild);
			"svg" !== t.nodeName.toLowerCase() || 1 !== t.nodeType;) t = t.nextSibling;
		return t
	}

	function El() {
		this._defs = {}, this._root = null, this._isDefine = !1, this._isText = !1
	}

	function Bl(t, e) {
		for (var n = t.firstChild; n;) {
			if (1 === n.nodeType) {
				var i = n.getAttribute("offset");
				i = i.indexOf("%") > 0 ? parseInt(i, 10) / 100 : i ? parseFloat(i) : 0;
				var r = n.getAttribute("stop-color") || "#000000";
				e.addColorStop(i, r)
			}
			n = n.nextSibling
		}
	}

	function zl(t, e) {
		t && t.__inheritedStyle && (e.__inheritedStyle || (e.__inheritedStyle = {}), s(e.__inheritedStyle, t.__inheritedStyle))
	}

	function Rl(t) {
		for (var e = E(t).split(h_), n = [], i = 0; i < e.length; i += 2) {
			var r = parseFloat(e[i]),
				a = parseFloat(e[i + 1]);
			n.push([r, a])
		}
		return n
	}

	function Nl(t, e, n, i) {
		var r = e.__inheritedStyle || {},
			a = "text" === e.type;
		if (1 === t.nodeType && (Vl(t, e), o(r, Hl(t)), !i))
			for (var s in f_)
				if (f_.hasOwnProperty(s)) {
					var l = t.getAttribute(s);
					null != l && (r[f_[s]] = l)
				} var u = a ? "textFill" : "fill",
			h = a ? "textStroke" : "stroke";
		e.style = e.style || new Og;
		var c = e.style;
		null != r.fill && c.set(u, Fl(r.fill, n)), null != r.stroke && c.set(h, Fl(r.stroke, n)), f(["lineWidth", "opacity",
				"fillOpacity", "strokeOpacity", "miterLimit", "fontSize"
			], function(t) {
				var e = "lineWidth" === t && a ? "textStrokeWidth" : t;
				null != r[t] && c.set(e, parseFloat(r[t]))
			}), r.textBaseline && "auto" !== r.textBaseline || (r.textBaseline = "alphabetic"), "alphabetic" === r.textBaseline &&
			(r.textBaseline = "bottom"), "start" === r.textAlign && (r.textAlign = "left"), "end" === r.textAlign && (r.textAlign =
				"right"), f(["lineDashOffset", "lineCap", "lineJoin", "fontWeight", "fontFamily", "fontStyle", "textAlign",
				"textBaseline"
			], function(t) {
				null != r[t] && c.set(t, r[t])
			}), r.lineDash && (e.style.lineDash = E(r.lineDash).split(h_)), c[h] && "none" !== c[h] && (e[h] = !0), e.__inheritedStyle =
			r
	}

	function Fl(t, e) {
		var n = e && t && t.match(p_);
		if (n) {
			var i = E(n[1]),
				r = e[i];
			return r
		}
		return t
	}

	function Vl(t, e) {
		var n = t.getAttribute("transform");
		if (n) {
			n = n.replace(/,/g, " ");
			var i = null,
				r = [];
			n.replace(g_, function(t, e, n) {
				r.push(e, n)
			});
			for (var a = r.length - 1; a > 0; a -= 2) {
				var o = r[a],
					s = r[a - 1];
				switch (i = i || Le(), s) {
					case "translate":
						o = E(o).split(h_), ze(i, i, [parseFloat(o[0]), parseFloat(o[1] || 0)]);
						break;
					case "scale":
						o = E(o).split(h_), Ne(i, i, [parseFloat(o[0]), parseFloat(o[1] || o[0])]);
						break;
					case "rotate":
						o = E(o).split(h_), Re(i, i, parseFloat(o[0]));
						break;
					case "skew":
						o = E(o).split(h_), console.warn("Skew transform is not supported yet");
						break;
					case "matrix":
						var o = E(o).split(h_);
						i[0] = parseFloat(o[0]), i[1] = parseFloat(o[1]), i[2] = parseFloat(o[2]), i[3] = parseFloat(o[3]), i[4] =
							parseFloat(o[4]), i[5] = parseFloat(o[5])
				}
			}
			e.setLocalTransform(i)
		}
	}

	function Hl(t) {
		var e = t.getAttribute("style"),
			n = {};
		if (!e) return n;
		var i = {};
		v_.lastIndex = 0;
		for (var r; null != (r = v_.exec(e));) i[r[1]] = r[2];
		for (var a in f_) f_.hasOwnProperty(a) && null != i[a] && (n[f_[a]] = i[a]);
		return n
	}

	function Gl(t, e, n) {
		var i = e / t.width,
			r = n / t.height,
			a = Math.min(i, r),
			o = [a, a],
			s = [-(t.x + t.width / 2) * a + e / 2, -(t.y + t.height / 2) * a + n / 2];
		return {
			scale: o,
			position: s
		}
	}

	function Wl(t, e) {
		return function(n, i, r) {
			return !e && this._disposed ? void ou(this.id) : (n = n && n.toLowerCase(), void Lp.prototype[t].call(this, n, i,
				r))
		}
	}

	function Xl() {
		Lp.call(this)
	}

	function Ul(t, e, n) {
		function r(t, e) {
			return t.__prio - e.__prio
		}
		n = n || {}, "string" == typeof e && (e = Q_[e]), this.id, this.group, this._dom = t;
		var a = "canvas";
		op && (a = ("undefined" == typeof window ? global : window).__ECHARTS__DEFAULT__RENDERER__ || a);
		var o = this._zr = ji(t, {
			renderer: n.renderer || a,
			devicePixelRatio: n.devicePixelRatio,
			width: n.width,
			height: n.height
		});
		this._throttledZrFlush = vl(y(o.flush, o), 17);
		var e = i(e);
		e && Mx(e, !0), this._theme = e, this._chartsViews = [], this._chartsMap = {}, this._componentsViews = [], this._componentsMap = {},
			this._coordSysMgr = new Is;
		var s = this._api = hu(this);
		En($_, r), En(j_, r), this._scheduler = new yl(this, s, j_, $_), Lp.call(this, this._ecEventProcessor = new cu),
			this._messageCenter = new Xl, this._initEvents(), this.resize = y(this.resize, this), this._pendingActions = [], o.animation
			.on("frame", this._onframe, this), Jl(o, this), B(this)
	}

	function Yl(t, e, n) {
		if (this._disposed) return void ou(this.id);
		var i, r = this._model,
			a = this._coordSysMgr.getCoordinateSystems();
		e = ur(r, e);
		for (var o = 0; o < a.length; o++) {
			var s = a[o];
			if (s[t] && null != (i = s[t](r, e, n))) return i
		}
		op && console.warn("No coordinate system that supports " + t + " found by the given finder.")
	}

	function ql(t) {
		var e = t._model,
			n = t._scheduler;
		n.restorePipelines(e), n.prepareStageTasks(), tu(t, "component", e, n), tu(t, "chart", e, n), n.plan()
	}

	function jl(t, e, n, i, r) {
		function a(i) {
			i && i.__alive && i[e] && i[e](i.__model, o, t._api, n)
		}
		var o = t._model;
		if (!i) return void w_(t._componentsViews.concat(t._chartsViews), a);
		var s = {};
		s[i + "Id"] = n[i + "Id"], s[i + "Index"] = n[i + "Index"], s[i + "Name"] = n[i + "Name"];
		var l = {
			mainType: i,
			query: s
		};
		r && (l.subType = r);
		var u = n.excludeSeriesId;
		null != u && (u = N(Ji(u))), o && o.eachComponent(l, function(e) {
			u && null != u.get(e.id) || a(t["series" === i ? "_chartsMap" : "_componentsMap"][e.__viewId])
		}, t)
	}

	function Zl(t, e) {
		var n = t._chartsMap,
			i = t._scheduler;
		e.eachSeries(function(t) {
			i.updateStreamModes(t, n[t.__viewId])
		})
	}

	function Kl(t, e) {
		var n = t.type,
			i = t.escapeConnect,
			r = Y_[n],
			a = r.actionInfo,
			l = (a.update || "update").split(":"),
			u = l.pop();
		l = null != l[0] && M_(l[0]), this[V_] = !0;
		var h = [t],
			c = !1;
		t.batch && (c = !0, h = p(t.batch, function(e) {
			return e = s(o({}, e), t), e.batch = null, e
		}));
		var d, f = [],
			g = "highlight" === n || "downplay" === n;
		w_(h, function(t) {
			d = r.action(t, this._model, this._api), d = d || o({}, t), d.type = a.event || d.type, f.push(d), g ? jl(this, u,
				t, "series") : l && jl(this, u, t, l.main, l.sub)
		}, this), "none" === u || g || l || (this[H_] ? (ql(this), X_.update.call(this, t), this[H_] = !1) : X_[u].call(
			this, t)), d = c ? {
			type: a.event || n,
			escapeConnect: i,
			batch: f
		} : f[0], this[V_] = !1, !e && this._messageCenter.trigger(d.type, d)
	}

	function $l(t) {
		for (var e = this._pendingActions; e.length;) {
			var n = e.shift();
			Kl.call(this, n, t)
		}
	}

	function Ql(t) {
		!t && this.trigger("updated")
	}

	function Jl(t, e) {
		t.on("rendered", function() {
			e.trigger("rendered"), !t.animation.isFinished() || e[H_] || e._scheduler.unfinished || e._pendingActions.length ||
				e.trigger("finished")
		})
	}

	function tu(t, e, n, i) {
		function r(t) {
			var e = "_ec_" + t.id + "_" + t.type,
				r = s[e];
			if (!r) {
				var h = M_(t.type),
					c = a ? zx.getClass(h.main, h.sub) : cl.getClass(h.sub);
				op && __(c, h.sub + " does not exist."), r = new c, r.init(n, u), s[e] = r, o.push(r), l.add(r.group)
			}
			t.__viewId = r.__id = e, r.__alive = !0, r.__model = t, r.group.__ecComponentInfo = {
				mainType: t.mainType,
				index: t.componentIndex
			}, !a && i.prepareView(r, t, n, u)
		}
		for (var a = "component" === e, o = a ? t._componentsViews : t._chartsViews, s = a ? t._componentsMap : t._chartsMap,
				l = t._zr, u = t._api, h = 0; h < o.length; h++) o[h].__alive = !1;
		a ? n.eachComponent(function(t, e) {
			"series" !== t && r(e)
		}) : n.eachSeries(r);
		for (var h = 0; h < o.length;) {
			var c = o[h];
			c.__alive ? h++ : (!a && c.renderTask.dispose(), l.remove(c.group), c.dispose(n, u), o.splice(h, 1), delete s[c.__id],
				c.__id = c.group.__ecComponentInfo = null)
		}
	}

	function eu(t) {
		t.clearColorPalette(), t.eachSeries(function(t) {
			t.clearColorPalette()
		})
	}

	function nu(t, e, n, i) {
		iu(t, e, n, i), w_(t._chartsViews, function(t) {
			t.__alive = !1
		}), ru(t, e, n, i), w_(t._chartsViews, function(t) {
			t.__alive || t.remove(e, n)
		})
	}

	function iu(t, e, n, i, r) {
		w_(r || t._componentsViews, function(t) {
			var r = t.__model;
			t.render(r, e, n, i), uu(r, t)
		})
	}

	function ru(t, e, n, i, r) {
		var a, o = t._scheduler;
		e.eachSeries(function(e) {
			var n = t._chartsMap[e.__viewId];
			n.__alive = !0;
			var s = n.renderTask;
			o.updatePayload(s, i), r && r.get(e.uid) && s.dirty(), a |= s.perform(o.getPerformArgs(s)), n.group.silent = !!e.get(
				"silent"), uu(e, n), lu(e, n)
		}), o.unfinished |= a, su(t, e), jx(t._zr.dom, e)
	}

	function au(t, e) {
		w_(K_, function(n) {
			n(t, e)
		})
	}

	function ou(t) {
		op && console.warn("Instance " + t + " has been disposed")
	}

	function su(t, e) {
		var n = t._zr,
			i = n.storage,
			r = 0;
		i.traverse(function() {
			r++
		}), r > e.get("hoverLayerThreshold") && !hp.node && e.eachSeries(function(e) {
			if (!e.preventUsingHoverLayer) {
				var n = t._chartsMap[e.__viewId];
				n.__alive && n.group.traverse(function(t) {
					t.useHoverLayer = !0
				})
			}
		})
	}

	function lu(t, e) {
		var n = t.get("blendMode") || null;
		op && !hp.canvasSupported && n && "source-over" !== n && console.warn("Only canvas support blendMode"), e.group.traverse(
			function(t) {
				t.isGroup || t.style.blend !== n && t.setStyle("blend", n), t.eachPendingDisplayable && t.eachPendingDisplayable(
					function(t) {
						t.setStyle("blend", n)
					})
			})
	}

	function uu(t, e) {
		var n = t.get("z"),
			i = t.get("zlevel");
		e.group.traverse(function(t) {
			"group" !== t.type && (null != n && (t.z = n), null != i && (t.zlevel = i))
		})
	}

	function hu(t) {
		var e = t._coordSysMgr;
		return o(new Ms(t), {
			getCoordinateSystems: y(e.getCoordinateSystems, e),
			getComponentByElement: function(e) {
				for (; e;) {
					var n = e.__ecComponentInfo;
					if (null != n) return t._model.getComponent(n.mainType, n.index);
					e = e.parent
				}
			}
		})
	}

	function cu() {
		this.eventInfo
	}

	function du(t) {
		function e(t, e) {
			for (var n = 0; n < t.length; n++) {
				var i = t[n];
				i[a] = e
			}
		}
		var n = 0,
			i = 1,
			r = 2,
			a = "__connectUpdateStatus";
		w_(q_, function(o, s) {
			t._messageCenter.on(s, function(o) {
				if (ew[t.group] && t[a] !== n) {
					if (o && o.escapeConnect) return;
					var s = t.makeActionFromEvent(o),
						l = [];
					w_(tw, function(e) {
						e !== t && e.group === t.group && l.push(e)
					}), e(l, n), w_(l, function(t) {
						t[a] !== i && t.dispatchAction(s)
					}), e(l, r)
				}
			})
		})
	}

	function fu(t, e, n) {
		if (op) {
			if (_v.replace(".", "") - 0 < T_.zrender.replace(".", "") - 0) throw new Error("zrender/src " + _v +
				" is too old for ECharts " + I_ + ". Current version need ZRender " + T_.zrender + "+");
			if (!t) throw new Error("Initialize failed: invalid dom.")
		}
		var i = mu(t);
		if (i) return op && console.warn("There is a chart instance already initialized on the dom."), i;
		op && (!T(t) || "CANVAS" === t.nodeName.toUpperCase() || (t.clientWidth || n && null != n.width) && (t.clientHeight ||
			n && null != n.height) || console.warn(
			"Can't get DOM width or height. Please check dom.clientWidth and dom.clientHeight. They should not be 0.For example, you may need to call this in the callback of window.onload."
		));
		var r = new Ul(t, e, n);
		return r.id = "ec_" + nw++, tw[r.id] = r, cr(t, rw, r.id), du(r), r
	}

	function pu(t) {
		if (_(t)) {
			var e = t;
			t = null, w_(e, function(e) {
				null != e.group && (t = e.group)
			}), t = t || "g_" + iw++, w_(e, function(e) {
				e.group = t
			})
		}
		return ew[t] = !0, t
	}

	function gu(t) {
		ew[t] = !1
	}

	function vu(t) {
		"string" == typeof t ? t = tw[t] : t instanceof Ul || (t = mu(t)), t instanceof Ul && !t.isDisposed() && t.dispose()
	}

	function mu(t) {
		return tw[dr(t, rw)]
	}

	function yu(t) {
		return tw[t]
	}

	function xu(t, e) {
		Q_[t] = e
	}

	function _u(t) {
		Z_.push(t)
	}

	function wu(t, e) {
		Au(j_, t, e, A_)
	}

	function bu(t) {
		K_.push(t)
	}

	function Su(t, e, n) {
		"function" == typeof e && (n = e, e = "");
		var i = S_(t) ? t.type : [t, t = {
			event: e
		}][0];
		t.event = (t.event || i).toLowerCase(), e = t.event, __(G_.test(i) && G_.test(e)), Y_[i] || (Y_[i] = {
			action: n,
			actionInfo: t
		}), q_[e] = i
	}

	function Mu(t, e) {
		Is.register(t, e)
	}

	function Iu(t) {
		var e = Is.get(t);
		return e ? e.getDimensionsInfo ? e.getDimensionsInfo() : e.dimensions.slice() : void 0
	}

	function Tu(t, e) {
		Au($_, t, e, L_, "layout")
	}

	function Cu(t, e) {
		Au($_, t, e, B_, "visual")
	}

	function Au(t, e, n, i, r) {
		if ((b_(e) || S_(e)) && (n = e, e = i), op) {
			if (isNaN(e) || null == e) throw new Error("Illegal priority");
			w_(t, function(t) {
				__(t.__raw !== n)
			})
		}
		var a = yl.wrapStageHandler(n, r);
		return a.__prio = e, a.__raw = n, t.push(a), a
	}

	function Du(t, e) {
		J_[t] = e
	}

	function ku(t) {
		return qy.extend(t)
	}

	function Pu(t) {
		return zx.extend(t)
	}

	function Lu(t) {
		return Bx.extend(t)
	}

	function Ou(t) {
		return cl.extend(t)
	}

	function Eu(t) {
		n("createCanvas", t)
	}

	function Bu(t, e, n) {
		y_.registerMap(t, e, n)
	}

	function zu(t) {
		var e = y_.retrieveMap(t);
		return e && e[0] && {
			geoJson: e[0].geoJSON,
			specialAreas: e[0].specialAreas
		}
	}

	function Ru(t) {
		return t
	}

	function Nu(t, e, n, i, r) {
		this._old = t, this._new = e, this._oldKeyGetter = n || Ru, this._newKeyGetter = i || Ru, this.context = r
	}

	function Fu(t, e, n, i, r) {
		for (var a = 0; a < t.length; a++) {
			var o = "_ec_" + r[i](t[a], a),
				s = e[o];
			null == s ? (n.push(o), e[o] = a) : (s.length || (e[o] = s = [s]), s.push(a))
		}
	}

	function Vu(t) {
		var e = {},
			n = e.encode = {},
			i = N(),
			r = [],
			a = [],
			o = e.userOutput = {
				dimensionNames: t.dimensions.slice(),
				encode: {}
			};
		f(t.dimensions, function(e) {
			var s = t.getDimensionInfo(e),
				l = s.coordDim;
			if (l) {
				op && O(null == sw.get(l));
				var u = s.coordDimIndex;
				Hu(n, l)[u] = e, s.isExtraCoord || (i.set(l, 1), Wu(s.type) && (r[0] = e), Hu(o.encode, l)[u] = s.index), s.defaultTooltip &&
					a.push(e)
			}
			sw.each(function(t, e) {
				var i = Hu(n, e),
					r = s.otherDims[e];
				null != r && r !== !1 && (i[r] = s.name)
			})
		});
		var s = [],
			l = {};
		i.each(function(t, e) {
			var i = n[e];
			l[e] = i[0], s = s.concat(i)
		}), e.dataDimsOnCoord = s, e.encodeFirstDimNotExtra = l;
		var u = n.label;
		u && u.length && (r = u.slice());
		var h = n.tooltip;
		return h && h.length ? a = h.slice() : a.length || (a = r.slice()), n.defaultedLabel = r, n.defaultedTooltip = a, e
	}

	function Hu(t, e) {
		return t.hasOwnProperty(e) || (t[e] = []), t[e]
	}

	function Gu(t) {
		return "category" === t ? "ordinal" : "time" === t ? "time" : "float"
	}

	function Wu(t) {
		return !("ordinal" === t || "time" === t)
	}

	function Xu(t) {
		null != t && o(this, t), this.otherDims = {}
	}

	function Uu(t) {
		return t._rawCount > 65535 ? fw : gw
	}

	function Yu(t) {
		var e = t.constructor;
		return e === Array ? t.slice() : new e(t)
	}

	function qu(t, e) {
		f(vw.concat(e.__wrappedMethods || []), function(n) {
			e.hasOwnProperty(n) && (t[n] = e[n])
		}), t.__wrappedMethods = e.__wrappedMethods, f(mw, function(n) {
			t[n] = i(e[n])
		}), t._calculationInfo = o(e._calculationInfo)
	}

	function ju(t, e, n, i, r) {
		var a = dw[e.type],
			o = i - 1,
			s = e.name,
			l = t[s][o];
		if (l && l.length < n) {
			for (var u = new a(Math.min(r - o * n, n)), h = 0; h < l.length; h++) u[h] = l[h];
			t[s][o] = u
		}
		for (var c = i * n; r > c; c += n) t[s].push(new a(Math.min(r - c, n)))
	}

	function Zu(t) {
		var e = t._invertedIndicesMap;
		f(e, function(n, i) {
			var r = t._dimensionInfos[i],
				a = r.ordinalMeta;
			if (a) {
				n = e[i] = new pw(a.categories.length);
				for (var o = 0; o < n.length; o++) n[o] = hw;
				for (var o = 0; o < t._count; o++) n[t.get(i, o)] = o
			}
		})
	}

	function Ku(t, e, n) {
		var i;
		if (null != e) {
			var r = t._chunkSize,
				a = Math.floor(n / r),
				o = n % r,
				s = t.dimensions[e],
				l = t._storage[s][a];
			if (l) {
				i = l[o];
				var u = t._dimensionInfos[s].ordinalMeta;
				u && u.categories.length && (i = u.categories[i])
			}
		}
		return i
	}

	function $u(t) {
		return t
	}

	function Qu(t) {
		return t < this._count && t >= 0 ? this._indices[t] : -1
	}

	function Ju(t, e) {
		var n = t._idList[e];
		return null == n && (n = Ku(t, t._idDimIdx, e)), null == n && (n = cw + e), n
	}

	function th(t) {
		return _(t) || (t = [t]), t
	}

	function eh(t, e) {
		for (var n = 0; n < e.length; n++) t._dimensionInfos[e[n]] || console.error("Unkown dimension " + e[n])
	}

	function nh(t, e) {
		var n = t.dimensions,
			i = new yw(p(n, t.getDimensionInfo, t), t.hostModel);
		qu(i, t);
		for (var r = i._storage = {}, a = t._storage, o = 0; o < n.length; o++) {
			var s = n[o];
			a[s] && (u(e, s) >= 0 ? (r[s] = ih(a[s]), i._rawExtent[s] = rh(), i._extent[s] = null) : r[s] = a[s])
		}
		return i
	}

	function ih(t) {
		for (var e = new Array(t.length), n = 0; n < t.length; n++) e[n] = Yu(t[n]);
		return e
	}

	function rh() {
		return [1 / 0, -1 / 0]
	}

	function ah(t, e, n) {
		function r(t, e, n) {
			null != sw.get(e) ? t.otherDims[e] = n : (t.coordDim = e, t.coordDimIndex = n, u.set(e, !0))
		}
		ns.isInstance(e) || (e = ns.seriesDataToSource(e)), n = n || {}, t = (t || []).slice();
		for (var a = (n.dimsDef || []).slice(), l = N(), u = N(), h = [], c = oh(e, t, a, n.dimCount), d = 0; c > d; d++) {
			var p = a[d] = o({}, S(a[d]) ? a[d] : {
					name: a[d]
				}),
				g = p.name,
				v = h[d] = new Xu;
			null != g && null == l.get(g) && (v.name = v.displayName = g, l.set(g, d)), null != p.type && (v.type = p.type),
				null != p.displayName && (v.displayName = p.displayName)
		}
		var m = n.encodeDef;
		!m && n.encodeDefaulter && (m = n.encodeDefaulter(e, c)), m = N(m), m.each(function(t, e) {
			if (t = Ji(t).slice(), 1 === t.length && !b(t[0]) && t[0] < 0) return void m.set(e, !1);
			var n = m.set(e, []);
			f(t, function(t, i) {
				b(t) && (t = l.get(t)), null != t && c > t && (n[i] = t, r(h[t], e, i))
			})
		});
		var y = 0;
		f(t, function(t) {
			var e, t, n, a;
			if (b(t)) e = t, t = {};
			else {
				e = t.name;
				var o = t.ordinalMeta;
				t.ordinalMeta = null, t = i(t), t.ordinalMeta = o, n = t.dimsDef, a = t.otherDims, t.name = t.coordDim = t.coordDimIndex =
					t.dimsDef = t.otherDims = null
			}
			var l = m.get(e);
			if (l !== !1) {
				var l = Ji(l);
				if (!l.length)
					for (var u = 0; u < (n && n.length || 1); u++) {
						for (; y < h.length && null != h[y].coordDim;) y++;
						y < h.length && l.push(y++)
					}
				f(l, function(i, o) {
					var l = h[i];
					if (r(s(l, t), e, o), null == l.name && n) {
						var u = n[o];
						!S(u) && (u = {
							name: u
						}), l.name = l.displayName = u.name, l.defaultTooltip = u.defaultTooltip
					}
					a && s(l.otherDims, a)
				})
			}
		});
		var x = n.generateCoord,
			_ = n.generateCoordCount,
			w = null != _;
		_ = x ? _ || 1 : 0;
		for (var M = x || "value", I = 0; c > I; I++) {
			var v = h[I] = h[I] || new Xu,
				T = v.coordDim;
			null == T && (v.coordDim = sh(M, u, w), v.coordDimIndex = 0, (!x || 0 >= _) && (v.isExtraCoord = !0), _--), null ==
				v.name && (v.name = sh(v.coordDim, l)), null != v.type || ps(e, I, v.name) !== ox.Must && (!v.isExtraCoord || null ==
					v.otherDims.itemName && null == v.otherDims.seriesName) || (v.type = "ordinal")
		}
		return h
	}

	function oh(t, e, n, i) {
		var r = Math.max(t.dimensionsDetectCount || 1, e.length, n.length, i || 0);
		return f(e, function(t) {
			var e = t.dimsDef;
			e && (r = Math.max(r, e.length))
		}), r
	}

	function sh(t, e, n) {
		if (n || null != e.get(t)) {
			for (var i = 0; null != e.get(t + i);) i++;
			t += i
		}
		return e.set(t, !0), t
	}

	function lh(t) {
		this.coordSysName = t, this.coordSysDims = [], this.axisMap = N(), this.categoryAxisMap = N(), this.firstCategoryDimIndex =
			null
	}

	function uh(t) {
		var e = t.get("coordinateSystem"),
			n = new lh(e),
			i = bw[e];
		return i ? (i(t, n, n.axisMap, n.categoryAxisMap), n) : void 0
	}

	function hh(t) {
		return "category" === t.get("type")
	}

	function ch(t, e, n) {
		n = n || {};
		var i, r, a, o, s = n.byIndex,
			l = n.stackedCoordDimension,
			u = !(!t || !t.get("stack"));
		if (f(e, function(t, n) {
				b(t) && (e[n] = t = {
					name: t
				}), u && !t.isExtraCoord && (s || i || !t.ordinalMeta || (i = t), r || "ordinal" === t.type || "time" === t.type ||
					l && l !== t.coordDim || (r = t))
			}), !r || s || i || (s = !0), r) {
			a = "__\x00ecstackresult", o = "__\x00ecstackedover", i && (i.createInvertedIndices = !0);
			var h = r.coordDim,
				c = r.type,
				d = 0;
			f(e, function(t) {
				t.coordDim === h && d++
			}), e.push({
				name: a,
				coordDim: h,
				coordDimIndex: d,
				type: c,
				isExtraCoord: !0,
				isCalculationCoord: !0
			}), d++, e.push({
				name: o,
				coordDim: o,
				coordDimIndex: d,
				type: c,
				isExtraCoord: !0,
				isCalculationCoord: !0
			})
		}
		return {
			stackedDimension: r && r.name,
			stackedByDimension: i && i.name,
			isStackedByIndex: s,
			stackedOverDimension: o,
			stackResultDimension: a
		}
	}

	function dh(t, e) {
		return !!e && e === t.getCalculationInfo("stackedDimension")
	}

	function fh(t, e) {
		return dh(t, e) ? t.getCalculationInfo("stackResultDimension") : e
	}

	function ph(t, e, n) {
		n = n || {}, ns.isInstance(t) || (t = ns.seriesDataToSource(t));
		var i, r = e.get("coordinateSystem"),
			a = Is.get(r),
			o = uh(e);
		o && (i = p(o.coordSysDims, function(t) {
			var e = {
					name: t
				},
				n = o.axisMap.get(t);
			if (n) {
				var i = n.get("type");
				e.type = Gu(i)
			}
			return e
		})), i || (i = a && (a.getDimensionsInfo ? a.getDimensionsInfo() : a.dimensions.slice()) || ["x", "y"]);
		var s, l, u = ww(t, {
			coordDimensions: i,
			generateCoord: n.generateCoord,
			encodeDefaulter: n.useEncodeDefaulter ? x(cs, i, e) : null
		});
		o && f(u, function(t, e) {
			var n = t.coordDim,
				i = o.categoryAxisMap.get(n);
			i && (null == s && (s = e), t.ordinalMeta = i.getOrdinalMeta()), null != t.otherDims.itemName && (l = !0)
		}), l || null == s || (u[s].otherDims.itemName = 0);
		var h = ch(e, u),
			c = new yw(u, e);
		c.setCalculationInfo(h);
		var d = null != s && gh(t) ? function(t, e, n, i) {
			return i === s ? n : this.defaultDimValueGetter(t, e, n, i)
		} : null;
		return c.hasItemOption = !1, c.initData(t, null, d), c
	}

	function gh(t) {
		if (t.sourceFormat === Qy) {
			var e = vh(t.data || []);
			return null != e && !_(er(e))
		}
	}

	function vh(t) {
		for (var e = 0; e < t.length && null == t[e];) e++;
		return t[e]
	}

	function mh(t) {
		this._setting = t || {}, this._extent = [1 / 0, -1 / 0], this._interval = 0, this.init && this.init.apply(this,
			arguments)
	}

	function yh(t) {
		this.categories = t.categories || [], this._needCollect = t.needCollect, this._deduplication = t.deduplication, this
			._map
	}

	function xh(t) {
		return t._map || (t._map = N(t.categories))
	}

	function _h(t) {
		return S(t) && null != t.value ? t.value : t + ""
	}

	function wh(t, e, n, i) {
		var r = {},
			a = t[1] - t[0],
			o = r.interval = Oo(a / e, !0);
		null != n && n > o && (o = r.interval = n), null != i && o > i && (o = r.interval = i);
		var s = r.intervalPrecision = bh(o),
			l = r.niceTickExtent = [Tw(Math.ceil(t[0] / o) * o, s), Tw(Math.floor(t[1] / o) * o, s)];
		return Mh(l, t), r
	}

	function bh(t) {
		return Io(t) + 2
	}

	function Sh(t, e, n) {
		t[e] = Math.max(Math.min(t[e], n[1]), n[0])
	}

	function Mh(t, e) {
		!isFinite(t[0]) && (t[0] = e[0]), !isFinite(t[1]) && (t[1] = e[1]), Sh(t, 0, e), Sh(t, 1, e), t[0] > t[1] && (t[0] =
			t[1])
	}

	function Ih(t) {
		return t.get("stack") || Dw + t.seriesIndex
	}

	function Th(t) {
		return t.dim + t.index
	}

	function Ch(t, e) {
		var n = [];
		return e.eachSeriesByType(t, function(t) {
			Oh(t) && !Eh(t) && n.push(t)
		}), n
	}

	function Ah(t) {
		var e = {};
		f(t, function(t) {
			var n = t.coordinateSystem,
				i = n.getBaseAxis();
			if ("time" === i.type || "value" === i.type)
				for (var r = t.getData(), a = i.dim + "_" + i.index, o = r.mapDimension(i.dim), s = 0, l = r.count(); l > s; ++s) {
					var u = r.get(o, s);
					e[a] ? e[a].push(u) : e[a] = [u]
				}
		});
		var n = [];
		for (var i in e)
			if (e.hasOwnProperty(i)) {
				var r = e[i];
				if (r) {
					r.sort(function(t, e) {
						return t - e
					});
					for (var a = null, o = 1; o < r.length; ++o) {
						var s = r[o] - r[o - 1];
						s > 0 && (a = null === a ? s : Math.min(a, s))
					}
					n[i] = a
				}
			} return n
	}

	function Dh(t) {
		var e = Ah(t),
			n = [];
		return f(t, function(t) {
			var i, r = t.coordinateSystem,
				a = r.getBaseAxis(),
				o = a.getExtent();
			if ("category" === a.type) i = a.getBandWidth();
			else if ("value" === a.type || "time" === a.type) {
				var s = a.dim + "_" + a.index,
					l = e[s],
					u = Math.abs(o[1] - o[0]),
					h = a.scale.getExtent(),
					c = Math.abs(h[1] - h[0]);
				i = l ? u / c * l : u
			} else {
				var d = t.getData();
				i = Math.abs(o[1] - o[0]) / d.count()
			}
			var f = wo(t.get("barWidth"), i),
				p = wo(t.get("barMaxWidth"), i),
				g = wo(t.get("barMinWidth") || 1, i),
				v = t.get("barGap"),
				m = t.get("barCategoryGap");
			n.push({
				bandWidth: i,
				barWidth: f,
				barMaxWidth: p,
				barMinWidth: g,
				barGap: v,
				barCategoryGap: m,
				axisKey: Th(a),
				stackId: Ih(t)
			})
		}), kh(n)
	}

	function kh(t) {
		var e = {};
		f(t, function(t) {
			var n = t.axisKey,
				i = t.bandWidth,
				r = e[n] || {
					bandWidth: i,
					remainedWidth: i,
					autoWidthCount: 0,
					categoryGap: "20%",
					gap: "30%",
					stacks: {}
				},
				a = r.stacks;
			e[n] = r;
			var o = t.stackId;
			a[o] || r.autoWidthCount++, a[o] = a[o] || {
				width: 0,
				maxWidth: 0
			};
			var s = t.barWidth;
			s && !a[o].width && (a[o].width = s, s = Math.min(r.remainedWidth, s), r.remainedWidth -= s);
			var l = t.barMaxWidth;
			l && (a[o].maxWidth = l);
			var u = t.barMinWidth;
			u && (a[o].minWidth = u);
			var h = t.barGap;
			null != h && (r.gap = h);
			var c = t.barCategoryGap;
			null != c && (r.categoryGap = c)
		});
		var n = {};
		return f(e, function(t, e) {
			n[e] = {};
			var i = t.stacks,
				r = t.bandWidth,
				a = wo(t.categoryGap, r),
				o = wo(t.gap, 1),
				s = t.remainedWidth,
				l = t.autoWidthCount,
				u = (s - a) / (l + (l - 1) * o);
			u = Math.max(u, 0), f(i, function(t) {
				var e = t.maxWidth,
					n = t.minWidth;
				if (t.width) {
					var i = t.width;
					e && (i = Math.min(i, e)), n && (i = Math.max(i, n)), t.width = i, s -= i + o * i, l--
				} else {
					var i = u;
					e && i > e && (i = Math.min(e, s)), n && n > i && (i = n), i !== u && (t.width = i, s -= i + o * i, l--)
				}
			}), u = (s - a) / (l + (l - 1) * o), u = Math.max(u, 0);
			var h, c = 0;
			f(i, function(t) {
				t.width || (t.width = u), h = t, c += t.width * (1 + o)
			}), h && (c -= h.width * o);
			var d = -c / 2;
			f(i, function(t, i) {
				n[e][i] = n[e][i] || {
					bandWidth: r,
					offset: d,
					width: t.width
				}, d += t.width * (1 + o)
			})
		}), n
	}

	function Ph(t, e, n) {
		if (t && e) {
			var i = t[Th(e)];
			return null != i && null != n && (i = i[Ih(n)]), i
		}
	}

	function Lh(t, e) {
		var n = Ch(t, e),
			i = Dh(n),
			r = {};
		f(n, function(t) {
			var e = t.getData(),
				n = t.coordinateSystem,
				a = n.getBaseAxis(),
				o = Ih(t),
				s = i[Th(a)][o],
				l = s.offset,
				u = s.width,
				h = n.getOtherAxis(a),
				c = t.get("barMinHeight") || 0;
			r[o] = r[o] || [], e.setLayout({
				bandWidth: s.bandWidth,
				offset: l,
				size: u
			});
			for (var d = e.mapDimension(h.dim), f = e.mapDimension(a.dim), p = dh(e, d), g = h.isHorizontal(), v = Bh(a, h, p),
					m = 0, y = e.count(); y > m; m++) {
				var x = e.get(d, m),
					_ = e.get(f, m),
					w = x >= 0 ? "p" : "n",
					b = v;
				p && (r[o][_] || (r[o][_] = {
					p: v,
					n: v
				}), b = r[o][_][w]);
				var S, M, I, T;
				if (g) {
					var C = n.dataToPoint([x, _]);
					S = b, M = C[1] + l, I = C[0] - v, T = u, Math.abs(I) < c && (I = (0 > I ? -1 : 1) * c), isNaN(I) || p && (r[o]
						[_][w] += I)
				} else {
					var C = n.dataToPoint([_, x]);
					S = C[0] + l, M = b, I = u, T = C[1] - v, Math.abs(T) < c && (T = (0 >= T ? -1 : 1) * c), isNaN(T) || p && (r[o]
						[_][w] += T)
				}
				e.setItemLayout(m, {
					x: S,
					y: M,
					width: I,
					height: T
				})
			}
		}, this)
	}

	function Oh(t) {
		return t.coordinateSystem && "cartesian2d" === t.coordinateSystem.type
	}

	function Eh(t) {
		return t.pipelineContext && t.pipelineContext.large
	}

	function Bh(t, e) {
		return e.toGlobalCoord(e.dataToCoord("log" === e.type ? 1 : 0))
	}

	function zh(t, e) {
		return Yw(t, Uw(e))
	}

	function Rh(t, e) {
		var n, i, r, a = t.type,
			o = e.getMin(),
			s = e.getMax(),
			l = t.getExtent();
		"ordinal" === a ? n = e.getCategories().length : (i = e.get("boundaryGap"), _(i) || (i = [i || 0, i || 0]),
				"boolean" == typeof i[0] && (op && console.warn(
					'Boolean type for boundaryGap is only allowed for ordinal axis. Please use string in percentage instead, e.g., "20%". Currently, boundaryGap is set to be 0.'
				), i = [0, 0]), i[0] = wo(i[0], 1), i[1] = wo(i[1], 1), r = l[1] - l[0] || Math.abs(l[0])), "dataMin" === o ? o =
			l[0] : "function" == typeof o && (o = o({
				min: l[0],
				max: l[1]
			})), "dataMax" === s ? s = l[1] : "function" == typeof s && (s = s({
				min: l[0],
				max: l[1]
			}));
		var u = null != o,
			h = null != s;
		null == o && (o = "ordinal" === a ? n ? 0 : 0 / 0 : l[0] - i[0] * r), null == s && (s = "ordinal" === a ? n ? n - 1 :
				0 / 0 : l[1] + i[1] * r), (null == o || !isFinite(o)) && (o = 0 / 0), (null == s || !isFinite(s)) && (s = 0 / 0),
			t.setBlank(C(o) || C(s) || "ordinal" === a && !t.getOrdinalMeta().categories.length), e.getNeedCrossZero() && (o >
				0 && s > 0 && !u && (o = 0), 0 > o && 0 > s && !h && (s = 0));
		var c = e.ecModel;
		if (c && "time" === a) {
			var d, p = Ch("bar", c);
			if (f(p, function(t) {
					d |= t.getBaseAxis() === e.axis
				}), d) {
				var g = Dh(p),
					v = Nh(o, s, e, g);
				o = v.min, s = v.max
			}
		}
		return {
			extent: [o, s],
			fixMin: u,
			fixMax: h
		}
	}

	function Nh(t, e, n, i) {
		var r = n.axis.getExtent(),
			a = r[1] - r[0],
			o = Ph(i, n.axis);
		if (void 0 === o) return {
			min: t,
			max: e
		};
		var s = 1 / 0;
		f(o, function(t) {
			s = Math.min(t.offset, s)
		});
		var l = -1 / 0;
		f(o, function(t) {
			l = Math.max(t.offset + t.width, l)
		}), s = Math.abs(s), l = Math.abs(l);
		var u = s + l,
			h = e - t,
			c = 1 - (s + l) / a,
			d = h / c - h;
		return e += d * (l / u), t -= d * (s / u), {
			min: t,
			max: e
		}
	}

	function Fh(t, e) {
		var n = Rh(t, e),
			i = n.extent,
			r = e.get("splitNumber");
		"log" === t.type && (t.base = e.get("logBase"));
		var a = t.type;
		t.setExtent(i[0], i[1]), t.niceExtent({
			splitNumber: r,
			fixMin: n.fixMin,
			fixMax: n.fixMax,
			minInterval: "interval" === a || "time" === a ? e.get("minInterval") : null,
			maxInterval: "interval" === a || "time" === a ? e.get("maxInterval") : null
		});
		var o = e.get("interval");
		null != o && t.setInterval && t.setInterval(o)
	}

	function Vh(t, e) {
		if (e = e || t.get("type")) switch (e) {
			case "category":
				return new Iw(t.getOrdinalMeta ? t.getOrdinalMeta() : t.getCategories(), [1 / 0, -1 / 0]);
			case "value":
				return new Aw;
			default:
				return (mh.getClass(e) || Aw).create(t)
		}
	}

	function Hh(t) {
		var e = t.scale.getExtent(),
			n = e[0],
			i = e[1];
		return !(n > 0 && i > 0 || 0 > n && 0 > i)
	}

	function Gh(t) {
		var e = t.getLabelModel().get("formatter"),
			n = "category" === t.type ? t.scale.getExtent()[0] : null;
		return "string" == typeof e ? e = function(e) {
			return function(n) {
				return n = t.scale.getLabel(n), e.replace("{value}", null != n ? n : "")
			}
		}(e) : "function" == typeof e ? function(i, r) {
			return null != n && (r = i - n), e(Wh(t, i), r)
		} : function(e) {
			return t.scale.getLabel(e)
		}
	}

	function Wh(t, e) {
		return "category" === t.type ? t.scale.getLabel(e) : e
	}

	function Xh(t) {
		var e = t.model,
			n = t.scale;
		if (e.get("axisLabel.show") && !n.isBlank()) {
			var i, r, a = "category" === t.type,
				o = n.getExtent();
			a ? r = n.count() : (i = n.getTicks(), r = i.length);
			var s, l = t.getLabelModel(),
				u = Gh(t),
				h = 1;
			r > 40 && (h = Math.ceil(r / 40));
			for (var c = 0; r > c; c += h) {
				var d = i ? i[c] : o[0] + c,
					f = u(d),
					p = l.getTextRect(f),
					g = Uh(p, l.get("rotate") || 0);
				s ? s.union(g) : s = g
			}
			return s
		}
	}

	function Uh(t, e) {
		var n = e * Math.PI / 180,
			i = t.plain(),
			r = i.width,
			a = i.height,
			o = r * Math.abs(Math.cos(n)) + Math.abs(a * Math.sin(n)),
			s = r * Math.abs(Math.sin(n)) + Math.abs(a * Math.cos(n)),
			l = new Tn(i.x, i.y, o, s);
		return l
	}

	function Yh(t) {
		var e = t.get("interval");
		return null == e ? "auto" : e
	}

	function qh(t) {
		return "category" === t.type && 0 === Yh(t.getLabelModel())
	}

	function jh(t, e) {
		if ("image" !== this.type) {
			var n = this.style,
				i = this.shape;
			i && "line" === i.symbolType ? n.stroke = t : this.__isEmptyBrush ? (n.stroke = t, n.fill = e || "#fff") : (n.fill &&
				(n.fill = t), n.stroke && (n.stroke = t)), this.dirty(!1)
		}
	}

	function Zh(t, e, n, i, r, a, o) {
		var s = 0 === t.indexOf("empty");
		s && (t = t.substr(5, 1).toLowerCase() + t.substr(6));
		var l;
		return l = 0 === t.indexOf("image://") ? xa(t.slice(8), new Tn(e, n, i, r), o ? "center" : "cover") : 0 === t.indexOf(
			"path://") ? ya(t.slice(7), {}, new Tn(e, n, i, r), o ? "center" : "cover") : new ob({
			shape: {
				symbolType: t,
				x: e,
				y: n,
				width: i,
				height: r
			}
		}), l.__isEmptyBrush = s, l.setColor = jh, l.setColor(a), l
	}

	function Kh(t) {
		return ph(t.getSource(), t)
	}

	function $h(t, e) {
		var n = e;
		fo.isInstance(e) || (n = new fo(e), c(n, Qw));
		var i = Vh(n);
		return i.setExtent(t[0], t[1]), Fh(i, n), i
	}

	function Qh(t) {
		c(t, Qw)
	}

	function Jh(t, e) {
		return Math.abs(t - e) < ub
	}

	function tc(t, e, n) {
		var i = 0,
			r = t[0];
		if (!r) return !1;
		for (var a = 1; a < t.length; a++) {
			var o = t[a];
			i += Ur(r[0], r[1], o[0], o[1], e, n), r = o
		}
		var s = t[0];
		return Jh(r[0], s[0]) && Jh(r[1], s[1]) || (i += Ur(r[0], r[1], s[0], s[1], e, n)), 0 !== i
	}

	function ec(t, e, n) {
		if (this.name = t, this.geometries = e, n) n = [n[0], n[1]];
		else {
			var i = this.getBoundingRect();
			n = [i.x + i.width / 2, i.y + i.height / 2]
		}
		this.center = n
	}

	function nc(t) {
		if (!t.UTF8Encoding) return t;
		var e = t.UTF8Scale;
		null == e && (e = 1024);
		for (var n = t.features, i = 0; i < n.length; i++)
			for (var r = n[i], a = r.geometry, o = a.coordinates, s = a.encodeOffsets, l = 0; l < o.length; l++) {
				var u = o[l];
				if ("Polygon" === a.type) o[l] = ic(u, s[l], e);
				else if ("MultiPolygon" === a.type)
					for (var h = 0; h < u.length; h++) {
						var c = u[h];
						u[h] = ic(c, s[l][h], e)
					}
			}
		return t.UTF8Encoding = !1, t
	}

	function ic(t, e, n) {
		for (var i = [], r = e[0], a = e[1], o = 0; o < t.length; o += 2) {
			var s = t.charCodeAt(o) - 64,
				l = t.charCodeAt(o + 1) - 64;
			s = s >> 1 ^ -(1 & s), l = l >> 1 ^ -(1 & l), s += r, l += a, r = s, a = l, i.push([s / n, l / n])
		}
		return i
	}

	function rc(t) {
		return "category" === t.type ? oc(t) : uc(t)
	}

	function ac(t, e) {
		return "category" === t.type ? lc(t, e) : {
			ticks: t.scale.getTicks()
		}
	}

	function oc(t) {
		var e = t.getLabelModel(),
			n = sc(t, e);
		return !e.get("show") || t.scale.isBlank() ? {
			labels: [],
			labelCategoryInterval: n.labelCategoryInterval
		} : n
	}

	function sc(t, e) {
		var n = hc(t, "labels"),
			i = Yh(e),
			r = cc(n, i);
		if (r) return r;
		var a, o;
		return w(i) ? a = mc(t, i) : (o = "auto" === i ? fc(t) : i, a = vc(t, o)), dc(n, i, {
			labels: a,
			labelCategoryInterval: o
		})
	}

	function lc(t, e) {
		var n = hc(t, "ticks"),
			i = Yh(e),
			r = cc(n, i);
		if (r) return r;
		var a, o;
		if ((!e.get("show") || t.scale.isBlank()) && (a = []), w(i)) a = mc(t, i, !0);
		else if ("auto" === i) {
			var s = sc(t, t.getLabelModel());
			o = s.labelCategoryInterval, a = p(s.labels, function(t) {
				return t.tickValue
			})
		} else o = i, a = vc(t, o, !0);
		return dc(n, i, {
			ticks: a,
			tickCategoryInterval: o
		})
	}

	function uc(t) {
		var e = t.scale.getTicks(),
			n = Gh(t);
		return {
			labels: p(e, function(e, i) {
				return {
					formattedLabel: n(e, i),
					rawLabel: t.scale.getLabel(e),
					tickValue: e
				}
			})
		}
	}

	function hc(t, e) {
		return cb(t)[e] || (cb(t)[e] = [])
	}

	function cc(t, e) {
		for (var n = 0; n < t.length; n++)
			if (t[n].key === e) return t[n].value
	}

	function dc(t, e, n) {
		return t.push({
			key: e,
			value: n
		}), n
	}

	function fc(t) {
		var e = cb(t).autoInterval;
		return null != e ? e : cb(t).autoInterval = t.calculateCategoryInterval()
	}

	function pc(t) {
		var e = gc(t),
			n = Gh(t),
			i = (e.axisRotate - e.labelRotate) / 180 * Math.PI,
			r = t.scale,
			a = r.getExtent(),
			o = r.count();
		if (a[1] - a[0] < 1) return 0;
		var s = 1;
		o > 40 && (s = Math.max(1, Math.floor(o / 40)));
		for (var l = a[0], u = t.dataToCoord(l + 1) - t.dataToCoord(l), h = Math.abs(u * Math.cos(i)), c = Math.abs(u * Math
				.sin(i)), d = 0, f = 0; l <= a[1]; l += s) {
			var p = 0,
				g = 0,
				v = Un(n(l), e.font, "center", "top");
			p = 1.3 * v.width, g = 1.3 * v.height, d = Math.max(d, p, 7), f = Math.max(f, g, 7)
		}
		var m = d / h,
			y = f / c;
		isNaN(m) && (m = 1 / 0), isNaN(y) && (y = 1 / 0);
		var x = Math.max(0, Math.floor(Math.min(m, y))),
			_ = cb(t.model),
			w = t.getExtent(),
			b = _.lastAutoInterval,
			S = _.lastTickCount;
		return null != b && null != S && Math.abs(b - x) <= 1 && Math.abs(S - o) <= 1 && b > x && _.axisExtend0 === w[0] &&
			_.axisExtend1 === w[1] ? x = b : (_.lastTickCount = o, _.lastAutoInterval = x, _.axisExtend0 = w[0], _.axisExtend1 =
				w[1]), x
	}

	function gc(t) {
		var e = t.getLabelModel();
		return {
			axisRotate: t.getRotate ? t.getRotate() : t.isHorizontal && !t.isHorizontal() ? 90 : 0,
			labelRotate: e.get("rotate") || 0,
			font: e.getFont()
		}
	}

	function vc(t, e, n) {
		function i(t) {
			l.push(n ? t : {
				formattedLabel: r(t),
				rawLabel: a.getLabel(t),
				tickValue: t
			})
		}
		var r = Gh(t),
			a = t.scale,
			o = a.getExtent(),
			s = t.getLabelModel(),
			l = [],
			u = Math.max((e || 0) + 1, 1),
			h = o[0],
			c = a.count();
		0 !== h && u > 1 && c / u > 2 && (h = Math.round(Math.ceil(h / u) * u));
		var d = qh(t),
			f = s.get("showMinLabel") || d,
			p = s.get("showMaxLabel") || d;
		f && h !== o[0] && i(o[0]);
		for (var g = h; g <= o[1]; g += u) i(g);
		return p && g - u !== o[1] && i(o[1]), l
	}

	function mc(t, e, n) {
		var i = t.scale,
			r = Gh(t),
			a = [];
		return f(i.getTicks(), function(t) {
			var o = i.getLabel(t);
			e(t, o) && a.push(n ? t : {
				formattedLabel: r(t),
				rawLabel: o,
				tickValue: t
			})
		}), a
	}

	function yc(t, e) {
		var n = t[1] - t[0],
			i = e,
			r = n / i / 2;
		t[0] += r, t[1] -= r
	}

	function xc(t, e, n, i) {
		function r(t, e) {
			return t = bo(t), e = bo(e), d ? t > e : e > t
		}
		var a = e.length;
		if (t.onBand && !n && a) {
			var o, s, l = t.getExtent();
			if (1 === a) e[0].coord = l[0], o = e[1] = {
				coord: l[0]
			};
			else {
				var u = e[a - 1].tickValue - e[0].tickValue,
					h = (e[a - 1].coord - e[0].coord) / u;
				f(e, function(t) {
					t.coord -= h / 2
				});
				var c = t.scale.getExtent();
				s = 1 + c[1] - e[a - 1].tickValue, o = {
					coord: e[a - 1].coord + h * s
				}, e.push(o)
			}
			var d = l[0] > l[1];
			r(e[0].coord, l[0]) && (i ? e[0].coord = l[0] : e.shift()), i && r(l[0], e[0].coord) && e.unshift({
				coord: l[0]
			}), r(l[1], o.coord) && (i ? o.coord = l[1] : e.pop()), i && r(o.coord, l[1]) && e.push({
				coord: l[1]
			})
		}
	}

	function _c(t) {
		return this._axes[t]
	}

	function wc(t) {
		mb.call(this, t)
	}

	function bc(t, e) {
		return e.type || (e.data ? "category" : "value")
	}

	function Sc(t, e) {
		return t.getCoordSysModel() === e
	}

	function Mc(t, e, n) {
		this._coordsMap = {}, this._coordsList = [], this._axesMap = {}, this._axesList = [], this._initCartesian(t, e, n),
			this.model = t
	}

	function Ic(t, e, n, i) {
		function r(t) {
			return t.dim + "_" + t.index
		}
		n.getAxesOnZeroOf = function() {
			return a ? [a] : []
		};
		var a, o = t[e],
			s = n.model,
			l = s.get("axisLine.onZero"),
			u = s.get("axisLine.onZeroAxisIndex");
		if (l) {
			if (null != u) Tc(o[u]) && (a = o[u]);
			else
				for (var h in o)
					if (o.hasOwnProperty(h) && Tc(o[h]) && !i[r(o[h])]) {
						a = o[h];
						break
					} a && (i[r(a)] = !0)
		}
	}

	function Tc(t) {
		return t && "category" !== t.type && "time" !== t.type && Hh(t)
	}

	function Cc(t, e) {
		var n = t.getExtent(),
			i = n[0] + n[1];
		t.toGlobalCoord = "x" === t.dim ? function(t) {
			return t + e
		} : function(t) {
			return i - t + e
		}, t.toLocalCoord = "x" === t.dim ? function(t) {
			return t - e
		} : function(t) {
			return i - t + e
		}
	}

	function Ac(t) {
		return p(Tb, function(e) {
			var n = t.getReferringComponents(e)[0];
			if (op && !n) throw new Error(e + ' "' + A(t.get(e + "Index"), t.get(e + "Id"), 0) + '" not found');
			return n
		})
	}

	function Dc(t) {
		return "cartesian2d" === t.get("coordinateSystem")
	}

	function kc(t, e) {
		var n = t.mapDimension("defaultedLabel", !0),
			i = n.length;
		if (1 === i) return $s(t, e, n[0]);
		if (i) {
			for (var r = [], a = 0; a < n.length; a++) {
				var o = $s(t, e, n[a]);
				r.push(o)
			}
			return r.join(" ")
		}
	}

	function Pc(t, e, n, i, r, a) {
		var o = n.getModel("label"),
			s = n.getModel("emphasis.label");
		Ha(t, e, o, s, {
			labelFetcher: r,
			labelDataIndex: a,
			defaultText: kc(r.getData(), a),
			isRectText: !0,
			autoColor: i
		}), Lc(t), Lc(e)
	}

	function Lc(t, e) {
		"outside" === t.textPosition && (t.textPosition = e)
	}

	function Oc(t, e, n) {
		var i = t.getArea(),
			r = t.getBaseAxis().isHorizontal(),
			a = i.x,
			o = i.y,
			s = i.width,
			l = i.height,
			u = n.get("lineStyle.width") || 2;
		a -= u / 2, o -= u / 2, s += u, l += u, a = Math.floor(a), s = Math.round(s);
		var h = new $m({
			shape: {
				x: a,
				y: o,
				width: s,
				height: l
			}
		});
		return e && (h.shape[r ? "width" : "height"] = 0, to(h, {
			shape: {
				width: s,
				height: l
			}
		}, n)), h
	}

	function Ec(t, e, n) {
		var i = t.getArea(),
			r = new Wm({
				shape: {
					cx: bo(t.cx, 1),
					cy: bo(t.cy, 1),
					r0: bo(i.r0, 1),
					r: bo(i.r, 1),
					startAngle: i.startAngle,
					endAngle: i.endAngle,
					clockwise: i.clockwise
				}
			});
		return e && (r.shape.endAngle = i.startAngle, to(r, {
			shape: {
				endAngle: i.endAngle
			}
		}, n)), r
	}

	function Bc(t, e, n) {
		return t ? "polar" === t.type ? Ec(t, e, n) : "cartesian2d" === t.type ? Oc(t, e, n) : null : null
	}

	function zc(t, e) {
		var n = t.getArea && t.getArea();
		if ("cartesian2d" === t.type) {
			var i = t.getBaseAxis();
			if ("category" !== i.type || !i.onBand) {
				var r = e.getLayout("bandWidth");
				i.isHorizontal() ? (n.x -= r, n.width += 2 * r) : (n.y -= r, n.height += 2 * r)
			}
		}
		return n
	}

	function Rc(t, e, n) {
		n.style.text = null, Ja(n, {
			shape: {
				width: 0
			}
		}, e, t, function() {
			n.parent && n.parent.remove(n)
		})
	}

	function Nc(t, e, n) {
		n.style.text = null, Ja(n, {
			shape: {
				r: n.shape.r0
			}
		}, e, t, function() {
			n.parent && n.parent.remove(n)
		})
	}

	function Fc(t) {
		return null != t.startAngle && null != t.endAngle && t.startAngle === t.endAngle
	}

	function Vc(t, e, n, i, r, a, o, l) {
		var u = e.getItemVisual(n, "color"),
			h = e.getItemVisual(n, "opacity"),
			c = e.getVisual("borderColor"),
			d = i.getModel("itemStyle"),
			f = i.getModel("emphasis.itemStyle").getBarItemStyle();
		l || t.setShape("r", d.get("barBorderRadius") || 0), t.useStyle(s({
			stroke: Fc(r) ? "none" : c,
			fill: Fc(r) ? "none" : u,
			opacity: h
		}, d.getBarItemStyle()));
		var p = i.getShallow("cursor");
		p && t.attr("cursor", p);
		var g = o ? r.height > 0 ? "bottom" : "top" : r.width > 0 ? "left" : "right";
		l || Pc(t.style, f, i, u, a, n, g), Fc(r) && (f.fill = f.stroke = "none"), Ra(t, f)
	}

	function Hc(t, e) {
		var n = t.get(Pb) || 0,
			i = isNaN(e.width) ? Number.MAX_VALUE : Math.abs(e.width),
			r = isNaN(e.height) ? Number.MAX_VALUE : Math.abs(e.height);
		return Math.min(n, i, r)
	}

	function Gc(t, e, n) {
		var i = t.getData(),
			r = [],
			a = i.getLayout("valueAxisHorizontal") ? 1 : 0;
		r[1 - a] = i.getLayout("valueAxisStart");
		var o = i.getLayout("largeDataIndices"),
			s = i.getLayout("barWidth"),
			l = t.getModel("backgroundStyle"),
			u = t.get("showBackground", !0);
		if (u) {
			var h = i.getLayout("largeBackgroundPoints"),
				c = [];
			c[1 - a] = i.getLayout("backgroundStart");
			var d = new Nb({
				shape: {
					points: h
				},
				incremental: !!n,
				__startPoint: c,
				__baseDimIdx: a,
				__largeDataIndices: o,
				__barWidth: s,
				silent: !0,
				z2: 0
			});
			Uc(d, l, i), e.add(d)
		}
		var f = new Nb({
			shape: {
				points: i.getLayout("largePoints")
			},
			incremental: !!n,
			__startPoint: r,
			__baseDimIdx: a,
			__largeDataIndices: o,
			__barWidth: s
		});
		e.add(f), Xc(f, t, i), f.seriesIndex = t.seriesIndex, t.get("silent") || (f.on("mousedown", Fb), f.on("mousemove",
			Fb))
	}

	function Wc(t, e, n) {
		var i = t.__baseDimIdx,
			r = 1 - i,
			a = t.shape.points,
			o = t.__largeDataIndices,
			s = Math.abs(t.__barWidth / 2),
			l = t.__startPoint[r];
		Lb[0] = e, Lb[1] = n;
		for (var u = Lb[i], h = Lb[1 - i], c = u - s, d = u + s, f = 0, p = a.length / 2; p > f; f++) {
			var g = 2 * f,
				v = a[g + i],
				m = a[g + r];
			if (v >= c && d >= v && (m >= l ? h >= l && m >= h : h >= m && l >= h)) return o[f]
		}
		return -1
	}

	function Xc(t, e, n) {
		var i = n.getVisual("borderColor") || n.getVisual("color"),
			r = e.getModel("itemStyle").getItemStyle(["color", "borderColor"]);
		t.useStyle(r), t.style.fill = null, t.style.stroke = i, t.style.lineWidth = n.getLayout("barWidth")
	}

	function Uc(t, e, n) {
		var i = e.get("borderColor") || e.get("color"),
			r = e.getItemStyle(["color", "borderColor"]);
		t.useStyle(r), t.style.fill = null, t.style.stroke = i, t.style.lineWidth = n.getLayout("barWidth")
	}

	function Yc(t, e, n) {
		var i, r = "polar" === n.type;
		return i = r ? n.getArea() : n.grid.getRect(), r ? {
			cx: i.cx,
			cy: i.cy,
			r0: t ? i.r0 : e.r0,
			r: t ? i.r : e.r,
			startAngle: t ? e.startAngle : 0,
			endAngle: t ? e.endAngle : 2 * Math.PI
		} : {
			x: t ? e.x : i.x,
			y: t ? i.y : e.y,
			width: t ? e.width : i.width,
			height: t ? i.height : e.height
		}
	}

	function qc(t, e, n) {
		var i = "polar" === t.type ? Wm : $m;
		return new i({
			shape: Yc(e, n, t),
			silent: !0,
			z2: 0
		})
	}

	function jc(t, e, n, i) {
		var r, a, o = Ao(n - t.rotation),
			s = i[0] > i[1],
			l = "start" === e && !s || "start" !== e && s;
		return Do(o - Vb / 2) ? (a = l ? "bottom" : "top", r = "center") : Do(o - 1.5 * Vb) ? (a = l ? "top" : "bottom", r =
			"center") : (a = "middle", r = 1.5 * Vb > o && o > Vb / 2 ? l ? "left" : "right" : l ? "right" : "left"), {
			rotation: o,
			textAlign: r,
			textVerticalAlign: a
		}
	}

	function Zc(t, e, n) {
		if (!qh(t.axis)) {
			var i = t.get("axisLabel.showMinLabel"),
				r = t.get("axisLabel.showMaxLabel");
			e = e || [], n = n || [];
			var a = e[0],
				o = e[1],
				s = e[e.length - 1],
				l = e[e.length - 2],
				u = n[0],
				h = n[1],
				c = n[n.length - 1],
				d = n[n.length - 2];
			i === !1 ? (Kc(a), Kc(u)) : $c(a, o) && (i ? (Kc(o), Kc(h)) : (Kc(a), Kc(u))), r === !1 ? (Kc(s), Kc(c)) : $c(l, s) &&
				(r ? (Kc(l), Kc(d)) : (Kc(s), Kc(c)))
		}
	}

	function Kc(t) {
		t && (t.ignore = !0)
	}

	function $c(t, e) {
		var n = t && t.getBoundingRect().clone(),
			i = e && e.getBoundingRect().clone();
		if (n && i) {
			var r = Oe([]);
			return Re(r, r, -t.rotation), n.applyTransform(Be([], r, t.getLocalTransform())), i.applyTransform(Be([], r, e.getLocalTransform())),
				n.intersect(i)
		}
	}

	function Qc(t) {
		return "middle" === t || "center" === t
	}

	function Jc(t, e, n, i, r) {
		for (var a = [], o = [], s = [], l = 0; l < t.length; l++) {
			var u = t[l].coord;
			o[0] = u, o[1] = 0, s[0] = u, s[1] = n, e && (ae(o, o, e), ae(s, s, e));
			var h = new Jm({
				anid: r + "_" + t[l].tickValue,
				subPixelOptimize: !0,
				shape: {
					x1: o[0],
					y1: o[1],
					x2: s[0],
					y2: s[1]
				},
				style: i,
				z2: 2,
				silent: !0
			});
			a.push(h)
		}
		return a
	}

	function td(t, e, n) {
		var i = e.axis,
			r = e.getModel("axisTick");
		if (r.get("show") && !i.scale.isBlank()) {
			for (var a = r.getModel("lineStyle"), o = n.tickDirection * r.get("length"), l = i.getTicksCoords(), u = Jc(l, t._transform,
					o, s(a.getLineStyle(), {
						stroke: e.get("axisLine.lineStyle.color")
					}), "ticks"), h = 0; h < u.length; h++) t.group.add(u[h]);
			return u
		}
	}

	function ed(t, e, n) {
		var i = e.axis,
			r = e.getModel("minorTick");
		if (r.get("show") && !i.scale.isBlank()) {
			var a = i.getMinorTicksCoords();
			if (a.length)
				for (var o = r.getModel("lineStyle"), l = n.tickDirection * r.get("length"), u = s(o.getLineStyle(), s(e.getModel(
						"axisTick").getLineStyle(), {
						stroke: e.get("axisLine.lineStyle.color")
					})), h = 0; h < a.length; h++)
					for (var c = Jc(a[h], t._transform, l, u, "minorticks_" + h), d = 0; d < c.length; d++) t.group.add(c[d])
		}
	}

	function nd(t, e, n) {
		var i = e.axis,
			r = A(n.axisLabelShow, e.get("axisLabel.show"));
		if (r && !i.scale.isBlank()) {
			var a = e.getModel("axisLabel"),
				o = a.get("margin"),
				s = i.getViewLabels(),
				l = (A(n.labelRotate, a.get("rotate")) || 0) * Vb / 180,
				u = Xb(n.rotation, l, n.labelDirection),
				h = e.getCategories && e.getCategories(!0),
				c = [],
				d = Ub(e),
				p = e.get("triggerEvent");
			return f(s, function(r, s) {
				var l = r.tickValue,
					f = r.formattedLabel,
					g = r.rawLabel,
					v = a;
				h && h[l] && h[l].textStyle && (v = new fo(h[l].textStyle, a, e.ecModel));
				var m = v.getTextColor() || e.get("axisLine.lineStyle.color"),
					y = i.dataToCoord(l),
					x = [y, n.labelOffset + n.labelDirection * o],
					_ = new Fm({
						anid: "label_" + l,
						position: x,
						rotation: u.rotation,
						silent: d,
						z2: 10
					});
				Wa(_.style, v, {
						text: f,
						textAlign: v.getShallow("align", !0) || u.textAlign,
						textVerticalAlign: v.getShallow("verticalAlign", !0) || v.getShallow("baseline", !0) || u.textVerticalAlign,
						textFill: "function" == typeof m ? m("category" === i.type ? g : "value" === i.type ? l + "" : l, s) : m
					}), p && (_.eventData = Wb(e), _.eventData.targetType = "axisLabel", _.eventData.value = g), t._dumbGroup.add(_),
					_.updateTransform(), c.push(_), t.group.add(_), _.decomposeTransform()
			}), c
		}
	}

	function id(t, e) {
		var n = {
			axesInfo: {},
			seriesInvolved: !1,
			coordSysAxesInfo: {},
			coordSysMap: {}
		};
		return rd(n, t, e), n.seriesInvolved && od(n, t), n
	}

	function rd(t, e, n) {
		var i = e.getComponent("tooltip"),
			r = e.getComponent("axisPointer"),
			a = r.get("link", !0) || [],
			o = [];
		Yb(n.getCoordinateSystems(), function(n) {
			function s(i, s, l) {
				var h = l.model.getModel("axisPointer", r),
					d = h.get("show");
				if (d && ("auto" !== d || i || dd(h))) {
					null == s && (s = h.get("triggerTooltip")), h = i ? ad(l, c, r, e, i, s) : h;
					var f = h.get("snap"),
						p = fd(l.model),
						g = s || f || "category" === l.type,
						v = t.axesInfo[p] = {
							key: p,
							axis: l,
							coordSys: n,
							axisPointerModel: h,
							triggerTooltip: s,
							involveSeries: g,
							snap: f,
							useHandle: dd(h),
							seriesModels: []
						};
					u[p] = v, t.seriesInvolved |= g;
					var m = sd(a, l);
					if (null != m) {
						var y = o[m] || (o[m] = {
							axesInfo: {}
						});
						y.axesInfo[p] = v, y.mapper = a[m].mapper, v.linkGroup = y
					}
				}
			}
			if (n.axisPointerEnabled) {
				var l = fd(n.model),
					u = t.coordSysAxesInfo[l] = {};
				t.coordSysMap[l] = n;
				var h = n.model,
					c = h.getModel("tooltip", i);
				if (Yb(n.getAxes(), qb(s, !1, null)), n.getTooltipAxes && i && c.get("show")) {
					var d = "axis" === c.get("trigger"),
						f = "cross" === c.get("axisPointer.type"),
						p = n.getTooltipAxes(c.get("axisPointer.axis"));
					(d || f) && Yb(p.baseAxes, qb(s, f ? "cross" : !0, d)), f && Yb(p.otherAxes, qb(s, "cross", !1))
				}
			}
		})
	}

	function ad(t, e, n, r, a, o) {
		var l = e.getModel("axisPointer"),
			u = {};
		Yb(["type", "snap", "lineStyle", "shadowStyle", "label", "animation", "animationDurationUpdate",
			"animationEasingUpdate", "z"
		], function(t) {
			u[t] = i(l.get(t))
		}), u.snap = "category" !== t.type && !!o, "cross" === l.get("type") && (u.type = "line");
		var h = u.label || (u.label = {});
		if (null == h.show && (h.show = !1), "cross" === a) {
			var c = l.get("label.show");
			if (h.show = null != c ? c : !0, !o) {
				var d = u.lineStyle = l.get("crossStyle");
				d && s(h, d.textStyle)
			}
		}
		return t.model.getModel("axisPointer", new fo(u, n, r))
	}

	function od(t, e) {
		e.eachSeries(function(e) {
			var n = e.coordinateSystem,
				i = e.get("tooltip.trigger", !0),
				r = e.get("tooltip.show", !0);
			n && "none" !== i && i !== !1 && "item" !== i && r !== !1 && e.get("axisPointer.show", !0) !== !1 && Yb(t.coordSysAxesInfo[
				fd(n.model)], function(t) {
				var i = t.axis;
				n.getAxis(i.dim) === i && (t.seriesModels.push(e), null == t.seriesDataCount && (t.seriesDataCount = 0), t.seriesDataCount +=
					e.getData().count())
			})
		}, this)
	}

	function sd(t, e) {
		for (var n = e.model, i = e.dim, r = 0; r < t.length; r++) {
			var a = t[r] || {};
			if (ld(a[i + "AxisId"], n.id) || ld(a[i + "AxisIndex"], n.componentIndex) || ld(a[i + "AxisName"], n.name)) return r
		}
	}

	function ld(t, e) {
		return "all" === t || _(t) && u(t, e) >= 0 || t === e
	}

	function ud(t) {
		var e = hd(t);
		if (e) {
			var n = e.axisPointerModel,
				i = e.axis.scale,
				r = n.option,
				a = n.get("status"),
				o = n.get("value");
			null != o && (o = i.parse(o));
			var s = dd(n);
			null == a && (r.status = s ? "show" : "hide");
			var l = i.getExtent().slice();
			l[0] > l[1] && l.reverse(), (null == o || o > l[1]) && (o = l[1]), o < l[0] && (o = l[0]), r.value = o, s && (r.status =
				e.axis.scale.isBlank() ? "hide" : "show")
		}
	}

	function hd(t) {
		var e = (t.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo;
		return e && e.axesInfo[fd(t)]
	}

	function cd(t) {
		var e = hd(t);
		return e && e.axisPointerModel
	}

	function dd(t) {
		return !!t.get("handle.show")
	}

	function fd(t) {
		return t.type + "||" + t.id
	}

	function pd(t, e, n, i, r, a) {
		var o = jb.getAxisPointerClass(t.axisPointerClass);
		if (o) {
			var s = cd(e);
			s ? (t._axisPointer || (t._axisPointer = new o)).render(e, s, i, a) : gd(t, i)
		}
	}

	function gd(t, e, n) {
		var i = t._axisPointer;
		i && i.dispose(e, n), t._axisPointer = null
	}

	function vd(t, e, n) {
		n = n || {};
		var i = t.coordinateSystem,
			r = e.axis,
			a = {},
			o = r.getAxesOnZeroOf()[0],
			s = r.position,
			l = o ? "onZero" : s,
			u = r.dim,
			h = i.getRect(),
			c = [h.x, h.x + h.width, h.y, h.y + h.height],
			d = {
				left: 0,
				right: 1,
				top: 0,
				bottom: 1,
				onZero: 2
			},
			f = e.get("offset") || 0,
			p = "x" === u ? [c[2] - f, c[3] + f] : [c[0] - f, c[1] + f];
		if (o) {
			var g = o.toGlobalCoord(o.dataToCoord(0));
			p[d.onZero] = Math.max(Math.min(g, p[1]), p[0])
		}
		a.position = ["y" === u ? p[d[l]] : c[0], "x" === u ? p[d[l]] : c[3]], a.rotation = Math.PI / 2 * ("x" === u ? 0 : 1);
		var v = {
			top: -1,
			bottom: 1,
			left: -1,
			right: 1
		};
		a.labelDirection = a.tickDirection = a.nameDirection = v[s], a.labelOffset = o ? p[d[s]] - p[d.onZero] : 0, e.get(
			"axisTick.inside") && (a.tickDirection = -a.tickDirection), A(n.labelInside, e.get("axisLabel.inside")) && (a.labelDirection = -
			a.labelDirection);
		var m = e.get("axisLabel.rotate");
		return a.labelRotate = "top" === l ? -m : m, a.z2 = 1, a
	}

	function md(t, e, n, i) {
		var r = n.axis;
		if (!r.scale.isBlank()) {
			var a = n.getModel("splitArea"),
				o = a.getModel("areaStyle"),
				l = o.get("color"),
				u = i.coordinateSystem.getRect(),
				h = r.getTicksCoords({
					tickModel: a,
					clamp: !0
				});
			if (h.length) {
				var c = l.length,
					d = t.__splitAreaColors,
					f = N(),
					p = 0;
				if (d)
					for (var g = 0; g < h.length; g++) {
						var v = d.get(h[g].tickValue);
						if (null != v) {
							p = (v + (c - 1) * g) % c;
							break
						}
					}
				var m = r.toGlobalCoord(h[0].coord),
					y = o.getAreaStyle();
				l = _(l) ? l : [l];
				for (var g = 1; g < h.length; g++) {
					var x, w, b, S, M = r.toGlobalCoord(h[g].coord);
					r.isHorizontal() ? (x = m, w = u.y, b = M - x, S = u.height, m = x + b) : (x = u.x, w = m, b = u.width, S = M - w,
						m = w + S);
					var I = h[g - 1].tickValue;
					null != I && f.set(I, p), e.add(new $m({
						anid: null != I ? "area_" + I : null,
						shape: {
							x: x,
							y: w,
							width: b,
							height: S
						},
						style: s({
							fill: l[p]
						}, y),
						silent: !0
					})), p = (p + 1) % c
				}
				t.__splitAreaColors = f
			}
		}
	}

	function yd(t) {
		t.__splitAreaColors = null
	}

	function xd(t, e, n) {
		Mg.call(this), this.updateData(t, e, n)
	}

	function _d(t) {
		return [t[0] / 2, t[1] / 2]
	}

	function wd(t, e) {
		this.parent.drift(t, e)
	}

	function bd(t, e) {
		if (!this.incremental && !this.useHoverLayer)
			if ("emphasis" === e) {
				var n = this.__symbolOriginalScale,
					i = n[1] / n[0],
					r = {
						scale: [Math.max(1.1 * n[0], n[0] + 3), Math.max(1.1 * n[1], n[1] + 3 * i)]
					};
				this.animateTo(r, 400, "elasticOut")
			} else "normal" === e && this.animateTo({
				scale: this.__symbolOriginalScale
			}, 400, "elasticOut")
	}

	function Sd(t) {
		this.group = new Mg, this._symbolCtor = t || xd
	}

	function Md(t, e, n, i) {
		return !(!e || isNaN(e[0]) || isNaN(e[1]) || i.isIgnore && i.isIgnore(n) || i.clipShape && !i.clipShape.contain(e[0],
			e[1]) || "none" === t.getItemVisual(n, "symbol"))
	}

	function Id(t) {
		return null == t || S(t) || (t = {
			isIgnore: t
		}), t || {}
	}

	function Td(t) {
		var e = t.hostModel;
		return {
			itemStyle: e.getModel("itemStyle").getItemStyle(["color"]),
			hoverItemStyle: e.getModel("emphasis.itemStyle").getItemStyle(),
			symbolRotate: e.get("symbolRotate"),
			symbolOffset: e.get("symbolOffset"),
			hoverAnimation: e.get("hoverAnimation"),
			labelModel: e.getModel("label"),
			hoverLabelModel: e.getModel("emphasis.label"),
			cursorStyle: e.get("cursor")
		}
	}

	function Cd(t, e, n) {
		var i, r = t.getBaseAxis(),
			a = t.getOtherAxis(r),
			o = Ad(a, n),
			s = r.dim,
			l = a.dim,
			u = e.mapDimension(l),
			h = e.mapDimension(s),
			c = "x" === l || "radius" === l ? 1 : 0,
			d = p(t.dimensions, function(t) {
				return e.mapDimension(t)
			}),
			f = e.getCalculationInfo("stackResultDimension");
		return (i |= dh(e, d[0])) && (d[0] = f), (i |= dh(e, d[1])) && (d[1] = f), {
			dataDimsForPoint: d,
			valueStart: o,
			valueAxisDim: l,
			baseAxisDim: s,
			stacked: !!i,
			valueDim: u,
			baseDim: h,
			baseDataOffset: c,
			stackedOverDimension: e.getCalculationInfo("stackedOverDimension")
		}
	}

	function Ad(t, e) {
		var n = 0,
			i = t.scale.getExtent();
		return "start" === e ? n = i[0] : "end" === e ? n = i[1] : i[0] > 0 ? n = i[0] : i[1] < 0 && (n = i[1]), n
	}

	function Dd(t, e, n, i) {
		var r = 0 / 0;
		t.stacked && (r = n.get(n.getCalculationInfo("stackedOverDimension"), i)), isNaN(r) && (r = t.valueStart);
		var a = t.baseDataOffset,
			o = [];
		return o[a] = n.get(t.baseDim, i), o[1 - a] = r, e.dataToPoint(o)
	}

	function kd(t, e) {
		var n = [];
		return e.diff(t).add(function(t) {
			n.push({
				cmd: "+",
				idx: t
			})
		}).update(function(t, e) {
			n.push({
				cmd: "=",
				idx: e,
				idx1: t
			})
		}).remove(function(t) {
			n.push({
				cmd: "-",
				idx: t
			})
		}).execute(), n
	}

	function Pd(t) {
		return isNaN(t[0]) || isNaN(t[1])
	}

	function Ld(t, e, n, i, r, a, o, s, l, u) {
		return "none" !== u && u ? Od.apply(this, arguments) : Ed.apply(this, arguments)
	}

	function Od(t, e, n, i, r, a, o, s, l, u, h) {
		for (var c = 0, d = n, f = 0; i > f; f++) {
			var p = e[d];
			if (d >= r || 0 > d) break;
			if (Pd(p)) {
				if (h) {
					d += a;
					continue
				}
				break
			}
			if (d === n) t[a > 0 ? "moveTo" : "lineTo"](p[0], p[1]);
			else if (l > 0) {
				var g = e[c],
					v = "y" === u ? 1 : 0,
					m = (p[v] - g[v]) * l;
				hS(dS, g), dS[v] = g[v] + m, hS(fS, p), fS[v] = p[v] - m, t.bezierCurveTo(dS[0], dS[1], fS[0], fS[1], p[0], p[1])
			} else t.lineTo(p[0], p[1]);
			c = d, d += a
		}
		return f
	}

	function Ed(t, e, n, i, r, a, o, s, l, u, h) {
		for (var c = 0, d = n, f = 0; i > f; f++) {
			var p = e[d];
			if (d >= r || 0 > d) break;
			if (Pd(p)) {
				if (h) {
					d += a;
					continue
				}
				break
			}
			if (d === n) t[a > 0 ? "moveTo" : "lineTo"](p[0], p[1]), hS(dS, p);
			else if (l > 0) {
				var g = d + a,
					v = e[g];
				if (h)
					for (; v && Pd(e[g]);) g += a, v = e[g];
				var m = .5,
					y = e[c],
					v = e[g];
				if (!v || Pd(v)) hS(fS, p);
				else {
					Pd(v) && !h && (v = p), q(cS, v, y);
					var x, _;
					if ("x" === u || "y" === u) {
						var w = "x" === u ? 0 : 1;
						x = Math.abs(p[w] - y[w]), _ = Math.abs(p[w] - v[w])
					} else x = Ap(p, y), _ = Ap(p, v);
					m = _ / (_ + x), uS(fS, p, cS, -l * (1 - m))
				}
				sS(dS, dS, s), lS(dS, dS, o), sS(fS, fS, s), lS(fS, fS, o), t.bezierCurveTo(dS[0], dS[1], fS[0], fS[1], p[0], p[1]),
					uS(dS, p, cS, l * m)
			} else t.lineTo(p[0], p[1]);
			c = d, d += a
		}
		return f
	}

	function Bd(t, e) {
		var n = [1 / 0, 1 / 0],
			i = [-1 / 0, -1 / 0];
		if (e)
			for (var r = 0; r < t.length; r++) {
				var a = t[r];
				a[0] < n[0] && (n[0] = a[0]), a[1] < n[1] && (n[1] = a[1]), a[0] > i[0] && (i[0] = a[0]), a[1] > i[1] && (i[1] = a[
					1])
			}
		return {
			min: e ? n : i,
			max: e ? i : n
		}
	}

	function zd(t, e) {
		if (t.length === e.length) {
			for (var n = 0; n < t.length; n++) {
				var i = t[n],
					r = e[n];
				if (i[0] !== r[0] || i[1] !== r[1]) return
			}
			return !0
		}
	}

	function Rd(t, e) {
		var n = [],
			i = [],
			r = [],
			a = [];
		return Br(t, n, i), Br(e, r, a), Math.max(Math.abs(n[0] - r[0]), Math.abs(n[1] - r[1]), Math.abs(i[0] - a[0]), Math.abs(
			i[1] - a[1]))
	}

	function Nd(t) {
		return "number" == typeof t ? t : t ? .5 : 0
	}

	function Fd(t, e, n) {
		if (!n.valueDim) return [];
		for (var i = [], r = 0, a = e.count(); a > r; r++) i.push(Dd(n, t, e, r));
		return i
	}

	function Vd(t, e, n) {
		for (var i = e.getBaseAxis(), r = "x" === i.dim || "radius" === i.dim ? 0 : 1, a = [], o = 0; o < t.length - 1; o++) {
			var s = t[o + 1],
				l = t[o];
			a.push(l);
			var u = [];
			switch (n) {
				case "end":
					u[r] = s[r], u[1 - r] = l[1 - r], a.push(u);
					break;
				case "middle":
					var h = (l[r] + s[r]) / 2,
						c = [];
					u[r] = c[r] = h, u[1 - r] = l[1 - r], c[1 - r] = s[1 - r], a.push(u), a.push(c);
					break;
				default:
					u[r] = l[r], u[1 - r] = s[1 - r], a.push(u)
			}
		}
		return t[o] && a.push(t[o]), a
	}

	function Hd(t, e) {
		var n = t.getVisual("visualMeta");
		if (n && n.length && t.count()) {
			if ("cartesian2d" !== e.type) return void(op && console.warn(
				"Visual map on line style is only supported on cartesian2d."));
			for (var i, r, a = n.length - 1; a >= 0; a--) {
				var o = n[a].dimension,
					s = t.dimensions[o],
					l = t.getDimensionInfo(s);
				if (i = l && l.coordDim, "x" === i || "y" === i) {
					r = n[a];
					break
				}
			}
			if (!r) return void(op && console.warn("Visual map on line style only support x or y dimension."));
			var u = e.getAxis(i),
				h = p(r.stops, function(t) {
					return {
						coord: u.toGlobalCoord(u.dataToCoord(t.value)),
						color: t.color
					}
				}),
				c = h.length,
				d = r.outerColors.slice();
			c && h[0].coord > h[c - 1].coord && (h.reverse(), d.reverse());
			var g = 10,
				v = h[0].coord - g,
				m = h[c - 1].coord + g,
				y = m - v;
			if (.001 > y) return "transparent";
			f(h, function(t) {
				t.offset = (t.coord - v) / y
			}), h.push({
				offset: c ? h[c - 1].offset : .5,
				color: d[1] || "transparent"
			}), h.unshift({
				offset: c ? h[0].offset : .5,
				color: d[0] || "transparent"
			});
			var x = new ay(0, 0, 0, 0, h, !0);
			return x[i] = v, x[i + "2"] = m, x
		}
	}

	function Gd(t, e, n) {
		var i = t.get("showAllSymbol"),
			r = "auto" === i;
		if (!i || r) {
			var a = n.getAxesByScale("ordinal")[0];
			if (a && (!r || !Wd(a, e))) {
				var o = e.mapDimension(a.dim),
					s = {};
				return f(a.getViewLabels(), function(t) {
						s[t.tickValue] = 1
					}),
					function(t) {
						return !s.hasOwnProperty(e.get(o, t))
					}
			}
		}
	}

	function Wd(t, e) {
		var n = t.getExtent(),
			i = Math.abs(n[1] - n[0]) / t.scale.count();
		isNaN(i) && (i = 0);
		for (var r = e.count(), a = Math.max(1, Math.round(r / 5)), o = 0; r > o; o += a)
			if (1.5 * xd.getSymbolSize(e, o)[t.isHorizontal() ? 1 : 0] > i) return !1;
		return !0
	}

	function Xd(t, e, n) {
		if ("cartesian2d" === t.type) {
			var i = t.getBaseAxis().isHorizontal(),
				r = Oc(t, e, n);
			if (!n.get("clip", !0)) {
				var a = r.shape,
					o = Math.max(a.width, a.height);
				i ? (a.y -= o, a.height += 2 * o) : (a.x -= o, a.width += 2 * o)
			}
			return r
		}
		return Ec(t, e, n)
	}

	function Ud(t, e) {
		this.getAllNames = function() {
			var t = e();
			return t.mapArray(t.getName)
		}, this.containName = function(t) {
			var n = e();
			return n.indexOfName(t) >= 0
		}, this.indexOfName = function(e) {
			var n = t();
			return n.indexOfName(e)
		}, this.getItemVisual = function(e, n) {
			var i = t();
			return i.getItemVisual(e, n)
		}
	}

	function Yd(t, e, n, i) {
		var r = e.getData(),
			a = this.dataIndex,
			o = r.getName(a),
			s = e.get("selectedOffset");
		i.dispatchAction({
			type: "pieToggleSelect",
			from: t,
			name: o,
			seriesId: e.id
		}), r.each(function(t) {
			qd(r.getItemGraphicEl(t), r.getItemLayout(t), e.isSelected(r.getName(t)), s, n)
		})
	}

	function qd(t, e, n, i, r) {
		var a = (e.startAngle + e.endAngle) / 2,
			o = Math.cos(a),
			s = Math.sin(a),
			l = n ? i : 0,
			u = [o * l, s * l];
		r ? t.animate().when(200, {
			position: u
		}).start("bounceOut") : t.attr("position", u)
	}

	function jd(t, e) {
		Mg.call(this);
		var n = new Wm({
				z2: 2
			}),
			i = new jm,
			r = new Fm;
		this.add(n), this.add(i), this.add(r), this.updateData(t, e, !0)
	}

	function Zd(t, e, n, i, r, a, o, s, l, u) {
		function h(e, n, i) {
			for (var r = e; n > r && !(t[r].y + i > l + o); r++)
				if (t[r].y += i, r > e && n > r + 1 && t[r + 1].y > t[r].y + t[r].height) return void c(r, i / 2);
			c(n - 1, i / 2)
		}

		function c(e, n) {
			for (var i = e; i >= 0 && !(t[i].y - n < l) && (t[i].y -= n, !(i > 0 && t[i].y > t[i - 1].y + t[i - 1].height)); i--)
			;
		}

		function d(t, e, n, i, r, a) {
			for (var o = a > 0 ? e ? Number.MAX_VALUE : 0 : e ? Number.MAX_VALUE : 0, s = 0, l = t.length; l > s; s++)
				if ("none" === t[s].labelAlignTo) {
					var u = Math.abs(t[s].y - i),
						h = t[s].len,
						c = t[s].len2,
						d = r + h > u ? Math.sqrt((r + h + c) * (r + h + c) - u * u) : Math.abs(t[s].x - n);
					e && d >= o && (d = o - 10), !e && o >= d && (d = o + 10), t[s].x = n + d * a, o = d
				}
		}
		t.sort(function(t, e) {
			return t.y - e.y
		});
		for (var f, p = 0, g = t.length, v = [], m = [], y = 0; g > y; y++) {
			if ("outer" === t[y].position && "labelLine" === t[y].labelAlignTo) {
				var x = t[y].x - u;
				t[y].linePoints[1][0] += x, t[y].x = u
			}
			f = t[y].y - p, 0 > f && h(y, g, -f, r), p = t[y].y + t[y].height
		}
		0 > o - p && c(g - 1, p - o);
		for (var y = 0; g > y; y++) t[y].y >= n ? m.push(t[y]) : v.push(t[y]);
		d(v, !1, e, n, i, r), d(m, !0, e, n, i, r)
	}

	function Kd(t, e, n, i, r, a, o, s) {
		for (var l = [], u = [], h = Number.MAX_VALUE, c = -Number.MAX_VALUE, d = 0; d < t.length; d++) $d(t[d]) || (t[d].x <
			e ? (h = Math.min(h, t[d].x), l.push(t[d])) : (c = Math.max(c, t[d].x), u.push(t[d])));
		Zd(u, e, n, i, 1, r, a, o, s, c), Zd(l, e, n, i, -1, r, a, o, s, h);
		for (var d = 0; d < t.length; d++) {
			var f = t[d];
			if (!$d(f)) {
				var p = f.linePoints;
				if (p) {
					var g, v = "edge" === f.labelAlignTo,
						m = f.textRect.width;
					g = v ? f.x < e ? p[2][0] - f.labelDistance - o - f.labelMargin : o + r - f.labelMargin - p[2][0] - f.labelDistance :
						f.x < e ? f.x - o - f.bleedMargin : o + r - f.x - f.bleedMargin, g < f.textRect.width && (f.text = $n(f.text, g,
							f.font), "edge" === f.labelAlignTo && (m = Xn(f.text, f.font)));
					var y = p[1][0] - p[2][0];
					v ? p[2][0] = f.x < e ? o + f.labelMargin + m + f.labelDistance : o + r - f.labelMargin - m - f.labelDistance : (
							p[2][0] = f.x < e ? f.x + f.labelDistance : f.x - f.labelDistance, p[1][0] = p[2][0] + y), p[1][1] = p[2][1] =
						f.y
				}
			}
		}
	}

	function $d(t) {
		return "center" === t.position
	}

	function Qd(t, e) {
		return Ko(t.getBoxLayoutParams(), {
			width: e.getWidth(),
			height: e.getHeight()
		})
	}

	function Jd(t, e, n) {
		fb.call(this, t, e, n), this.type = "value", this.angle = 0, this.name = "", this.model
	}

	function tf(t, e, n) {
		this._model = t, this.dimensions = [], this._indicatorAxes = p(t.getIndicatorModels(), function(t, e) {
			var n = "indicator_" + e,
				i = new Jd(n, "log" === t.get("axisType") ? new $w : new Aw);
			return i.name = t.get("name"), i.model = t, t.axis = i, this.dimensions.push(n), i
		}, this), this.resize(t, n), this.cx, this.cy, this.r, this.r0, this.startAngle
	}

	function ef(t, e) {
		return s({
			show: e
		}, t)
	}

	function nf(t) {
		return _(t) || (t = [+t, +t]), t
	}

	function rf(t) {
		return !isNaN(t[0]) && !isNaN(t[1])
	}

	function af(t) {
		return [t.cx, t.cy]
	}

	function of (t, e, n) {
		var i, r = {},
			a = "toggleSelected" === t;
		return n.eachComponent("legend", function(n) {
			a && null != i ? n[i ? "select" : "unSelect"](e.name) : "allSelect" === t || "inverseSelect" === t ? n[t]() : (n[
				t](e.name), i = n.isSelected(e.name));
			var o = n.getData();
			f(o, function(t) {
				var e = t.get("name");
				if ("\n" !== e && "" !== e) {
					var i = n.isSelected(e);
					r[e] = r.hasOwnProperty(e) ? r[e] && i : i
				}
			})
		}), "allSelect" === t || "inverseSelect" === t ? {
			selected: r
		} : {
			name: e.name,
			selected: r
		}
	}

	function sf(t, e) {
		var n = Ey(e.get("padding")),
			i = e.getItemStyle(["color", "opacity"]);
		i.fill = e.get("backgroundColor");
		var t = new $m({
			shape: {
				x: t.x - n[3],
				y: t.y - n[0],
				width: t.width + n[1] + n[3],
				height: t.height + n[0] + n[2],
				r: e.get("borderRadius")
			},
			style: i,
			silent: !0,
			z2: -1
		});
		return t
	}

	function lf(t, e, n, i, r, a) {
		var o;
		return "line" !== e && e.indexOf("empty") < 0 ? (o = n.getItemStyle(), t.style.stroke = i, a || (o.stroke = r)) : o =
			n.getItemStyle(["borderWidth", "borderColor"]), t.setStyle(o)
	}

	function uf(t, e, n, i) {
		cf(t, e, n, i), n.dispatchAction({
			type: "legendToggleSelect",
			name: null != t ? t : e
		}), hf(t, e, n, i)
	}

	function hf(t, e, n, i) {
		var r = n.getZr().storage.getDisplayList()[0];
		r && r.useHoverLayer || n.dispatchAction({
			type: "highlight",
			seriesName: t,
			name: e,
			excludeSeriesId: i
		})
	}

	function cf(t, e, n, i) {
		var r = n.getZr().storage.getDisplayList()[0];
		r && r.useHoverLayer || n.dispatchAction({
			type: "downplay",
			seriesName: t,
			name: e,
			excludeSeriesId: i
		})
	}

	function df(t, e, n) {
		var i = t.getOrient(),
			r = [1, 1];
		r[i.index] = 0, $o(e, n, {
			type: "box",
			ignoreSize: r
		})
	}

	function ff(t, e, n, i, r) {
		var a = t.axis;
		if (!a.scale.isBlank() && a.containData(e)) {
			if (!t.involveSeries) return void n.showPointer(t, e);
			var s = pf(e, t),
				l = s.payloadBatch,
				u = s.snapToValue;
			l[0] && null == r.seriesIndex && o(r, l[0]), !i && t.snap && a.containData(u) && null != u && (e = u), n.showPointer(
				t, e, l, r), n.showTooltip(t, s, u)
		}
	}

	function pf(t, e) {
		var n = e.axis,
			i = n.dim,
			r = t,
			a = [],
			o = Number.MAX_VALUE,
			s = -1;
		return QS(e.seriesModels, function(e) {
			var l, u, h = e.getData().mapDimension(i, !0);
			if (e.getAxisTooltipData) {
				var c = e.getAxisTooltipData(h, t, n);
				u = c.dataIndices, l = c.nestestValue
			} else {
				if (u = e.getData().indicesOfNearest(h[0], t, "category" === n.type ? .5 : null), !u.length) return;
				l = e.getData().get(h[0], u[0])
			}
			if (null != l && isFinite(l)) {
				var d = t - l,
					f = Math.abs(d);
				o >= f && ((o > f || d >= 0 && 0 > s) && (o = f, s = d, r = l, a.length = 0), QS(u, function(t) {
					a.push({
						seriesIndex: e.seriesIndex,
						dataIndexInside: t,
						dataIndex: e.getData().getRawIndex(t)
					})
				}))
			}
		}), {
			payloadBatch: a,
			snapToValue: r
		}
	}

	function gf(t, e, n, i) {
		t[e.key] = {
			value: n,
			payloadBatch: i
		}
	}

	function vf(t, e, n, i) {
		var r = n.payloadBatch,
			a = e.axis,
			o = a.model,
			s = e.axisPointerModel;
		if (e.triggerTooltip && r.length) {
			var l = e.coordSys.model,
				u = fd(l),
				h = t.map[u];
			h || (h = t.map[u] = {
				coordSysId: l.id,
				coordSysIndex: l.componentIndex,
				coordSysType: l.type,
				coordSysMainType: l.mainType,
				dataByAxis: []
			}, t.list.push(h)), h.dataByAxis.push({
				axisDim: a.dim,
				axisIndex: o.componentIndex,
				axisType: o.type,
				axisId: o.id,
				value: i,
				valueLabelOpt: {
					precision: s.get("label.precision"),
					formatter: s.get("label.formatter")
				},
				seriesDataIndices: r.slice()
			})
		}
	}

	function mf(t, e, n) {
		var i = n.axesInfo = [];
		QS(e, function(e, n) {
			var r = e.axisPointerModel.option,
				a = t[n];
			a ? (!e.useHandle && (r.status = "show"), r.value = a.value, r.seriesDataIndices = (a.payloadBatch || []).slice()) :
				!e.useHandle && (r.status = "hide"), "show" === r.status && i.push({
					axisDim: e.axis.dim,
					axisIndex: e.axis.model.componentIndex,
					value: r.value
				})
		})
	}

	function yf(t, e, n, i) {
		if (bf(e) || !t.list.length) return void i({
			type: "hideTip"
		});
		var r = ((t.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};
		i({
			type: "showTip",
			escapeConnect: !0,
			x: e[0],
			y: e[1],
			tooltipOption: n.tooltipOption,
			position: n.position,
			dataIndexInside: r.dataIndexInside,
			dataIndex: r.dataIndex,
			seriesIndex: r.seriesIndex,
			dataByCoordSys: t.list
		})
	}

	function xf(t, e, n) {
		var i = n.getZr(),
			r = "axisPointerLastHighlights",
			a = tM(i)[r] || {},
			o = tM(i)[r] = {};
		QS(t, function(t) {
			var e = t.axisPointerModel.option;
			"show" === e.status && QS(e.seriesDataIndices, function(t) {
				var e = t.seriesIndex + " | " + t.dataIndex;
				o[e] = t
			})
		});
		var s = [],
			l = [];
		f(a, function(t, e) {
			!o[e] && l.push(t)
		}), f(o, function(t, e) {
			!a[e] && s.push(t)
		}), l.length && n.dispatchAction({
			type: "downplay",
			escapeConnect: !0,
			batch: l
		}), s.length && n.dispatchAction({
			type: "highlight",
			escapeConnect: !0,
			batch: s
		})
	}

	function _f(t, e) {
		for (var n = 0; n < (t || []).length; n++) {
			var i = t[n];
			if (e.axis.dim === i.axisDim && e.axis.model.componentIndex === i.axisIndex) return i
		}
	}

	function wf(t) {
		var e = t.axis.model,
			n = {},
			i = n.axisDim = t.axis.dim;
		return n.axisIndex = n[i + "AxisIndex"] = e.componentIndex, n.axisName = n[i + "AxisName"] = e.name, n.axisId = n[i +
			"AxisId"] = e.id, n
	}

	function bf(t) {
		return !t || null == t[0] || isNaN(t[0]) || null == t[1] || isNaN(t[1])
	}

	function Sf(t, e, n) {
		if (!hp.node) {
			var i = e.getZr();
			nM(i).records || (nM(i).records = {}), Mf(i, e);
			var r = nM(i).records[t] || (nM(i).records[t] = {});
			r.handler = n
		}
	}

	function Mf(t, e) {
		function n(n, i) {
			t.on(n, function(n) {
				var r = Af(e);
				iM(nM(t).records, function(t) {
					t && i(t, n, r.dispatchAction)
				}), If(r.pendings, e)
			})
		}
		nM(t).initialized || (nM(t).initialized = !0, n("click", x(Cf, "click")), n("mousemove", x(Cf, "mousemove")), n(
			"globalout", Tf))
	}

	function If(t, e) {
		var n, i = t.showTip.length,
			r = t.hideTip.length;
		i ? n = t.showTip[i - 1] : r && (n = t.hideTip[r - 1]), n && (n.dispatchAction = null, e.dispatchAction(n))
	}

	function Tf(t, e, n) {
		t.handler("leave", null, n)
	}

	function Cf(t, e, n, i) {
		e.handler(t, n, i)
	}

	function Af(t) {
		var e = {
				showTip: [],
				hideTip: []
			},
			n = function(i) {
				var r = e[i.type];
				r ? r.push(i) : (i.dispatchAction = n, t.dispatchAction(i))
			};
		return {
			dispatchAction: n,
			pendings: e
		}
	}

	function Df(t, e) {
		if (!hp.node) {
			var n = e.getZr(),
				i = (nM(n).records || {})[t];
			i && (nM(n).records[t] = null)
		}
	}

	function kf() {}

	function Pf(t, e, n, i) {
		Lf(aM(n).lastProp, i) || (aM(n).lastProp = i, e ? Ja(n, i, t) : (n.stopAnimation(), n.attr(i)))
	}

	function Lf(t, e) {
		if (S(t) && S(e)) {
			var n = !0;
			return f(e, function(e, i) {
				n = n && Lf(t[i], e)
			}), !!n
		}
		return t === e
	}

	function Of(t, e) {
		t[e.get("label.show") ? "show" : "hide"]()
	}

	function Ef(t) {
		return {
			position: t.position.slice(),
			rotation: t.rotation || 0
		}
	}

	function Bf(t, e, n) {
		var i = e.get("z"),
			r = e.get("zlevel");
		t && t.traverse(function(t) {
			"group" !== t.type && (null != i && (t.z = i), null != r && (t.zlevel = r), t.silent = n)
		})
	}

	function zf(t) {
		var e, n = t.get("type"),
			i = t.getModel(n + "Style");
		return "line" === n ? (e = i.getLineStyle(), e.fill = null) : "shadow" === n && (e = i.getAreaStyle(), e.stroke =
			null), e
	}

	function Rf(t, e, n, i, r) {
		var a = n.get("value"),
			o = Ff(a, e.axis, e.ecModel, n.get("seriesDataIndices"), {
				precision: n.get("label.precision"),
				formatter: n.get("label.formatter")
			}),
			s = n.getModel("label"),
			l = Ey(s.get("padding") || 0),
			u = s.getFont(),
			h = Un(o, u),
			c = r.position,
			d = h.width + l[1] + l[3],
			f = h.height + l[0] + l[2],
			p = r.align;
		"right" === p && (c[0] -= d), "center" === p && (c[0] -= d / 2);
		var g = r.verticalAlign;
		"bottom" === g && (c[1] -= f), "middle" === g && (c[1] -= f / 2), Nf(c, d, f, i);
		var v = s.get("backgroundColor");
		v && "auto" !== v || (v = e.get("axisLine.lineStyle.color")), t.label = {
			shape: {
				x: 0,
				y: 0,
				width: d,
				height: f,
				r: s.get("borderRadius")
			},
			position: c.slice(),
			style: {
				text: o,
				textFont: u,
				textFill: s.getTextColor(),
				textPosition: "inside",
				textPadding: l,
				fill: v,
				stroke: s.get("borderColor") || "transparent",
				lineWidth: s.get("borderWidth") || 0,
				shadowBlur: s.get("shadowBlur"),
				shadowColor: s.get("shadowColor"),
				shadowOffsetX: s.get("shadowOffsetX"),
				shadowOffsetY: s.get("shadowOffsetY")
			},
			z2: 10
		}
	}

	function Nf(t, e, n, i) {
		var r = i.getWidth(),
			a = i.getHeight();
		t[0] = Math.min(t[0] + e, r) - e, t[1] = Math.min(t[1] + n, a) - n, t[0] = Math.max(t[0], 0), t[1] = Math.max(t[1],
			0)
	}

	function Ff(t, e, n, i, r) {
		t = e.scale.parse(t);
		var a = e.scale.getLabel(t, {
				precision: r.precision
			}),
			o = r.formatter;
		if (o) {
			var s = {
				value: Wh(e, t),
				axisDimension: e.dim,
				axisIndex: e.index,
				seriesData: []
			};
			f(i, function(t) {
				var e = n.getSeriesByIndex(t.seriesIndex),
					i = t.dataIndexInside,
					r = e && e.getDataParams(i);
				r && s.seriesData.push(r)
			}), b(o) ? a = o.replace("{value}", a) : w(o) && (a = o(s))
		}
		return a
	}

	function Vf(t, e, n) {
		var i = Le();
		return Re(i, i, n.rotation), ze(i, i, n.position), no([t.dataToCoord(e), (n.labelOffset || 0) + (n.labelDirection ||
			1) * (n.labelMargin || 0)], i)
	}

	function Hf(t, e, n, i, r, a) {
		var o = Hb.innerTextLayout(n.rotation, 0, n.labelDirection);
		n.labelMargin = r.get("label.margin"), Rf(e, i, r, a, {
			position: Vf(i.axis, t, n),
			align: o.textAlign,
			verticalAlign: o.textVerticalAlign
		})
	}

	function Gf(t, e, n) {
		return n = n || 0, {
			x1: t[n],
			y1: t[1 - n],
			x2: e[n],
			y2: e[1 - n]
		}
	}

	function Wf(t, e, n) {
		return n = n || 0, {
			x: t[n],
			y: t[1 - n],
			width: e[n],
			height: e[1 - n]
		}
	}

	function Xf(t, e) {
		var n = {};
		return n[e.dim + "AxisIndex"] = e.index, t.getCartesian(n)
	}

	function Uf(t) {
		return "x" === t.dim ? 0 : 1
	}

	function Yf(t) {
		var e = "cubic-bezier(0.23, 1, 0.32, 1)",
			n = "left " + t + "s " + e + ",top " + t + "s " + e;
		return p(dM, function(t) {
			return t + "transition:" + n
		}).join(";")
	}

	function qf(t) {
		var e = [],
			n = t.get("fontSize"),
			i = t.getTextColor();
		i && e.push("color:" + i), e.push("font:" + t.getFont());
		var r = t.get("lineHeight");
		null == r && (r = Math.round(3 * n / 2)), n && e.push("line-height:" + r + "px");
		var a = t.get("textShadowColor"),
			o = t.get("textShadowBlur") || 0,
			s = t.get("textShadowOffsetX") || 0,
			l = t.get("textShadowOffsetY") || 0;
		return o && e.push("text-shadow:" + s + "px " + l + "px " + o + "px " + a), hM(["decoration", "align"], function(n) {
			var i = t.get(n);
			i && e.push("text-" + n + ":" + i)
		}), e.join(";")
	}

	function jf(t) {
		var e = [],
			n = t.get("transitionDuration"),
			i = t.get("backgroundColor"),
			r = t.getModel("textStyle"),
			a = t.get("padding");
		return n && e.push(Yf(n)), i && (hp.canvasSupported ? e.push("background-Color:" + i) : (e.push("background-Color:#" +
			rn(i)), e.push("filter:alpha(opacity=70)"))), hM(["width", "color", "radius"], function(n) {
			var i = "border-" + n,
				r = cM(i),
				a = t.get(r);
			null != a && e.push(i + ":" + a + ("color" === n ? "" : "px"))
		}), e.push(qf(r)), null != a && e.push("padding:" + Ey(a).join("px ") + "px"), e.join(";") + ";"
	}

	function Zf(t, e, n, i, r) {
		var a = e && e.painter;
		if (n) {
			var o = a && a.getViewportRoot();
			o && pe(t, o, document.body, i, r)
		} else {
			t[0] = i, t[1] = r;
			var s = a && a.getViewportRootOffset();
			s && (t[0] += s.offsetLeft, t[1] += s.offsetTop)
		}
		t[2] = t[0] / e.getWidth(), t[3] = t[1] / e.getHeight()
	}

	function Kf(t, e, n) {
		if (hp.wxa) return null;
		var i = document.createElement("div");
		i.domBelongToZr = !0, this.el = i;
		var r = this._zr = e.getZr(),
			a = this._appendToBody = n && n.appendToBody;
		this._styleCoord = [0, 0, 0, 0], Zf(this._styleCoord, r, a, e.getWidth() / 2, e.getHeight() / 2), a ? document.body.appendChild(
			i) : t.appendChild(i), this._container = t, this._show = !1, this._hideTimeout;
		var o = this;
		i.onmouseenter = function() {
			o._enterable && (clearTimeout(o._hideTimeout), o._show = !0), o._inContent = !0
		}, i.onmousemove = function(t) {
			if (t = t || window.event, !o._enterable) {
				var e = r.handler,
					n = r.painter.getViewportRoot();
				be(n, t, !0), e.dispatch("mousemove", t)
			}
		}, i.onmouseleave = function() {
			o._enterable && o._show && o.hideLater(o._hideDelay), o._inContent = !1
		}
	}

	function $f(t, e, n, i) {
		t[0] = n, t[1] = i, t[2] = t[0] / e.getWidth(), t[3] = t[1] / e.getHeight()
	}

	function Qf(t) {
		var e = this._zr = t.getZr();
		this._styleCoord = [0, 0, 0, 0], $f(this._styleCoord, e, t.getWidth() / 2, t.getHeight() / 2), this._show = !1, this
			._hideTimeout
	}

	function Jf(t) {
		for (var e = t.pop(); t.length;) {
			var n = t.pop();
			n && (fo.isInstance(n) && (n = n.get("tooltip", !0)), "string" == typeof n && (n = {
				formatter: n
			}), e = new fo(n, e, e.ecModel))
		}
		return e
	}

	function tp(t, e) {
		return t.dispatchAction || y(e.dispatchAction, e)
	}

	function ep(t, e, n, i, r, a, o) {
		var s = n.getOuterSize(),
			l = s.width,
			u = s.height;
		return null != a && (t + l + a > i ? t -= l + a : t += a), null != o && (e + u + o > r ? e -= u + o : e += o), [t, e]
	}

	function np(t, e, n, i, r) {
		var a = n.getOuterSize(),
			o = a.width,
			s = a.height;
		return t = Math.min(t + o, i) - o, e = Math.min(e + s, r) - s, t = Math.max(t, 0), e = Math.max(e, 0), [t, e]
	}

	function ip(t, e, n) {
		var i = n[0],
			r = n[1],
			a = 5,
			o = 0,
			s = 0,
			l = e.width,
			u = e.height;
		switch (t) {
			case "inside":
				o = e.x + l / 2 - i / 2, s = e.y + u / 2 - r / 2;
				break;
			case "top":
				o = e.x + l / 2 - i / 2, s = e.y - r - a;
				break;
			case "bottom":
				o = e.x + l / 2 - i / 2, s = e.y + u + a;
				break;
			case "left":
				o = e.x - i - a, s = e.y + u / 2 - r / 2;
				break;
			case "right":
				o = e.x + l + a, s = e.y + u / 2 - r / 2
		}
		return [o, s]
	}

	function rp(t) {
		return "center" === t || "middle" === t
	}
	var ap;
	"undefined" != typeof window ? ap = window.__DEV__ : "undefined" != typeof global && (ap = global.__DEV__),
		"undefined" == typeof ap && (ap = !0);
	var op = ap,
		sp = 2311,
		lp = function() {
			return sp++
		},
		up = {};
	up = "object" == typeof wx && "function" == typeof wx.getSystemInfoSync ? {
		browser: {},
		os: {},
		node: !1,
		wxa: !0,
		canvasSupported: !0,
		svgSupported: !1,
		touchEventsSupported: !0,
		domSupported: !1
	} : "undefined" == typeof document && "undefined" != typeof self ? {
		browser: {},
		os: {},
		node: !1,
		worker: !0,
		canvasSupported: !0,
		domSupported: !1
	} : "undefined" == typeof navigator ? {
		browser: {},
		os: {},
		node: !0,
		worker: !1,
		canvasSupported: !0,
		svgSupported: !0,
		domSupported: !1
	} : e(navigator.userAgent);
	var hp = up,
		cp = {
			"[object Function]": 1,
			"[object RegExp]": 1,
			"[object Date]": 1,
			"[object Error]": 1,
			"[object CanvasGradient]": 1,
			"[object CanvasPattern]": 1,
			"[object Image]": 1,
			"[object Canvas]": 1
		},
		dp = {
			"[object Int8Array]": 1,
			"[object Uint8Array]": 1,
			"[object Uint8ClampedArray]": 1,
			"[object Int16Array]": 1,
			"[object Uint16Array]": 1,
			"[object Int32Array]": 1,
			"[object Uint32Array]": 1,
			"[object Float32Array]": 1,
			"[object Float64Array]": 1
		},
		fp = Object.prototype.toString,
		pp = Array.prototype,
		gp = pp.forEach,
		vp = pp.filter,
		mp = pp.slice,
		yp = pp.map,
		xp = pp.reduce,
		_p = {},
		wp = function() {
			return _p.createCanvas()
		};
	_p.createCanvas = function() {
		return document.createElement("canvas")
	};
	var bp, Sp = "__ec_primitive__";
	R.prototype = {
		constructor: R,
		get: function(t) {
			return this.data.hasOwnProperty(t) ? this.data[t] : null
		},
		set: function(t, e) {
			return this.data[t] = e
		},
		each: function(t, e) {
			void 0 !== e && (t = y(t, e));
			for (var n in this.data) this.data.hasOwnProperty(n) && t(this.data[n], n)
		},
		removeKey: function(t) {
			delete this.data[t]
		}
	};
	var Mp = (Object.freeze || Object)({
			$override: n,
			clone: i,
			merge: r,
			mergeAll: a,
			extend: o,
			defaults: s,
			createCanvas: wp,
			getContext: l,
			indexOf: u,
			inherits: h,
			mixin: c,
			isArrayLike: d,
			each: f,
			map: p,
			reduce: g,
			filter: v,
			find: m,
			bind: y,
			curry: x,
			isArray: _,
			isFunction: w,
			isString: b,
			isObject: S,
			isBuiltInObject: M,
			isTypedArray: I,
			isDom: T,
			eqNaN: C,
			retrieve: A,
			retrieve2: D,
			retrieve3: k,
			slice: P,
			normalizeCssArray: L,
			assert: O,
			trim: E,
			setAsPrimitive: B,
			isPrimitive: z,
			createHashMap: N,
			concatArray: F,
			noop: V
		}),
		Ip = "undefined" == typeof Float32Array ? Array : Float32Array,
		Tp = j,
		Cp = Z,
		Ap = ee,
		Dp = ne,
		kp = (Object.freeze || Object)({
			create: H,
			copy: G,
			clone: W,
			set: X,
			add: U,
			scaleAndAdd: Y,
			sub: q,
			len: j,
			length: Tp,
			lenSquare: Z,
			lengthSquare: Cp,
			mul: K,
			div: $,
			dot: Q,
			scale: J,
			normalize: te,
			distance: ee,
			dist: Ap,
			distanceSquare: ne,
			distSquare: Dp,
			negate: ie,
			lerp: re,
			applyTransform: ae,
			min: oe,
			max: se
		});
	le.prototype = {
		constructor: le,
		_dragStart: function(t) {
			for (var e = t.target; e && !e.draggable;) e = e.parent;
			e && (this._draggingTarget = e, e.dragging = !0, this._x = t.offsetX, this._y = t.offsetY, this.dispatchToElement(
				ue(e, t), "dragstart", t.event))
		},
		_drag: function(t) {
			var e = this._draggingTarget;
			if (e) {
				var n = t.offsetX,
					i = t.offsetY,
					r = n - this._x,
					a = i - this._y;
				this._x = n, this._y = i, e.drift(r, a, t), this.dispatchToElement(ue(e, t), "drag", t.event);
				var o = this.findHover(n, i, e).target,
					s = this._dropTarget;
				this._dropTarget = o, e !== o && (s && o !== s && this.dispatchToElement(ue(s, t), "dragleave", t.event), o && o !==
					s && this.dispatchToElement(ue(o, t), "dragenter", t.event))
			}
		},
		_dragEnd: function(t) {
			var e = this._draggingTarget;
			e && (e.dragging = !1), this.dispatchToElement(ue(e, t), "dragend", t.event), this._dropTarget && this.dispatchToElement(
				ue(this._dropTarget, t), "drop", t.event), this._draggingTarget = null, this._dropTarget = null
		}
	};
	var Pp = Array.prototype.slice,
		Lp = function(t) {
			this._$handlers = {}, this._$eventProcessor = t
		};
	Lp.prototype = {
		constructor: Lp,
		one: function(t, e, n, i) {
			return ce(this, t, e, n, i, !0)
		},
		on: function(t, e, n, i) {
			return ce(this, t, e, n, i, !1)
		},
		isSilent: function(t) {
			var e = this._$handlers;
			return !e[t] || !e[t].length
		},
		off: function(t, e) {
			var n = this._$handlers;
			if (!t) return this._$handlers = {}, this;
			if (e) {
				if (n[t]) {
					for (var i = [], r = 0, a = n[t].length; a > r; r++) n[t][r].h !== e && i.push(n[t][r]);
					n[t] = i
				}
				n[t] && 0 === n[t].length && delete n[t]
			} else delete n[t];
			return this
		},
		trigger: function(t) {
			var e = this._$handlers[t],
				n = this._$eventProcessor;
			if (e) {
				var i = arguments,
					r = i.length;
				r > 3 && (i = Pp.call(i, 1));
				for (var a = e.length, o = 0; a > o;) {
					var s = e[o];
					if (n && n.filter && null != s.query && !n.filter(t, s.query)) o++;
					else {
						switch (r) {
							case 1:
								s.h.call(s.ctx);
								break;
							case 2:
								s.h.call(s.ctx, i[1]);
								break;
							case 3:
								s.h.call(s.ctx, i[1], i[2]);
								break;
							default:
								s.h.apply(s.ctx, i)
						}
						s.one ? (e.splice(o, 1), a--) : o++
					}
				}
			}
			return n && n.afterTrigger && n.afterTrigger(t), this
		},
		triggerWithContext: function(t) {
			var e = this._$handlers[t],
				n = this._$eventProcessor;
			if (e) {
				var i = arguments,
					r = i.length;
				r > 4 && (i = Pp.call(i, 1, i.length - 1));
				for (var a = i[i.length - 1], o = e.length, s = 0; o > s;) {
					var l = e[s];
					if (n && n.filter && null != l.query && !n.filter(t, l.query)) s++;
					else {
						switch (r) {
							case 1:
								l.h.call(a);
								break;
							case 2:
								l.h.call(a, i[1]);
								break;
							case 3:
								l.h.call(a, i[1], i[2]);
								break;
							default:
								l.h.apply(a, i)
						}
						l.one ? (e.splice(s, 1), o--) : s++
					}
				}
			}
			return n && n.afterTrigger && n.afterTrigger(t), this
		}
	};
	var Op = Math.log(2),
		Ep = "___zrEVENTSAVED",
		Bp = [],
		zp = "undefined" != typeof window && !!window.addEventListener,
		Rp = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
		Np = [],
		Fp = zp ? function(t) {
			t.preventDefault(), t.stopPropagation(), t.cancelBubble = !0
		} : function(t) {
			t.returnValue = !1, t.cancelBubble = !0
		},
		Vp = function() {
			this._track = []
		};
	Vp.prototype = {
		constructor: Vp,
		recognize: function(t, e, n) {
			return this._doTrack(t, e, n), this._recognize(t)
		},
		clear: function() {
			return this._track.length = 0, this
		},
		_doTrack: function(t, e, n) {
			var i = t.touches;
			if (i) {
				for (var r = {
						points: [],
						touches: [],
						target: e,
						event: t
					}, a = 0, o = i.length; o > a; a++) {
					var s = i[a],
						l = xe(n, s, {});
					r.points.push([l.zrX, l.zrY]), r.touches.push(s)
				}
				this._track.push(r)
			}
		},
		_recognize: function(t) {
			for (var e in Hp)
				if (Hp.hasOwnProperty(e)) {
					var n = Hp[e](this._track, t);
					if (n) return n
				}
		}
	};
	var Hp = {
			pinch: function(t, e) {
				var n = t.length;
				if (n) {
					var i = (t[n - 1] || {}).points,
						r = (t[n - 2] || {}).points || i;
					if (r && r.length > 1 && i && i.length > 1) {
						var a = Ie(i) / Ie(r);
						!isFinite(a) && (a = 1), e.pinchScale = a;
						var o = Te(i);
						return e.pinchX = o[0], e.pinchY = o[1], {
							type: "pinch",
							target: t[0].target,
							event: e
						}
					}
				}
			}
		},
		Gp = "silent";
	De.prototype.dispose = function() {};
	var Wp = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"],
		Xp = function(t, e, n, i) {
			Lp.call(this), this.storage = t, this.painter = e, this.painterRoot = i, n = n || new De, this.proxy = null, this._hovered = {},
				this._lastTouchMoment, this._lastX, this._lastY, this._gestureMgr, le.call(this), this.setHandlerProxy(n)
		};
	Xp.prototype = {
		constructor: Xp,
		setHandlerProxy: function(t) {
			this.proxy && this.proxy.dispose(), t && (f(Wp, function(e) {
				t.on && t.on(e, this[e], this)
			}, this), t.handler = this), this.proxy = t
		},
		mousemove: function(t) {
			var e = t.zrX,
				n = t.zrY,
				i = Pe(this, e, n),
				r = this._hovered,
				a = r.target;
			a && !a.__zr && (r = this.findHover(r.x, r.y), a = r.target);
			var o = this._hovered = i ? {
					x: e,
					y: n
				} : this.findHover(e, n),
				s = o.target,
				l = this.proxy;
			l.setCursor && l.setCursor(s ? s.cursor : "default"), a && s !== a && this.dispatchToElement(r, "mouseout", t),
				this.dispatchToElement(o, "mousemove", t), s && s !== a && this.dispatchToElement(o, "mouseover", t)
		},
		mouseout: function(t) {
			var e = t.zrEventControl,
				n = t.zrIsToLocalDOM;
			"only_globalout" !== e && this.dispatchToElement(this._hovered, "mouseout", t), "no_globalout" !== e && !n &&
				this.trigger("globalout", {
					type: "globalout",
					event: t
				})
		},
		resize: function() {
			this._hovered = {}
		},
		dispatch: function(t, e) {
			var n = this[t];
			n && n.call(this, e)
		},
		dispose: function() {
			this.proxy.dispose(), this.storage = this.proxy = this.painter = null
		},
		setCursorStyle: function(t) {
			var e = this.proxy;
			e.setCursor && e.setCursor(t)
		},
		dispatchToElement: function(t, e, n) {
			t = t || {};
			var i = t.target;
			if (!i || !i.silent) {
				for (var r = "on" + e, a = Ce(e, t, n); i && (i[r] && (a.cancelBubble = i[r].call(i, a)), i.trigger(e, a), i = i
						.parent, !a.cancelBubble););
				a.cancelBubble || (this.trigger(e, a), this.painter && this.painter.eachOtherLayer(function(t) {
					"function" == typeof t[r] && t[r].call(t, a), t.trigger && t.trigger(e, a)
				}))
			}
		},
		findHover: function(t, e, n) {
			for (var i = this.storage.getDisplayList(), r = {
					x: t,
					y: e
				}, a = i.length - 1; a >= 0; a--) {
				var o;
				if (i[a] !== n && !i[a].ignore && (o = ke(i[a], t, e)) && (!r.topTarget && (r.topTarget = i[a]), o !== Gp)) {
					r.target = i[a];
					break
				}
			}
			return r
		},
		processGesture: function(t, e) {
			this._gestureMgr || (this._gestureMgr = new Vp);
			var n = this._gestureMgr;
			"start" === e && n.clear();
			var i = n.recognize(t, this.findHover(t.zrX, t.zrY, null).target, this.proxy.dom);
			if ("end" === e && n.clear(), i) {
				var r = i.type;
				t.gestureEvent = r, this.dispatchToElement({
					target: i.target
				}, r, i.event)
			}
		}
	}, f(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"], function(t) {
		Xp.prototype[t] = function(e) {
			var n, i, r = e.zrX,
				a = e.zrY,
				o = Pe(this, r, a);
			if ("mouseup" === t && o || (n = this.findHover(r, a), i = n.target), "mousedown" === t) this._downEl = i, this._downPoint = [
				e.zrX, e.zrY
			], this._upEl = i;
			else if ("mouseup" === t) this._upEl = i;
			else if ("click" === t) {
				if (this._downEl !== this._upEl || !this._downPoint || Ap(this._downPoint, [e.zrX, e.zrY]) > 4) return;
				this._downPoint = null
			}
			this.dispatchToElement(n, t, e)
		}
	}), c(Xp, Lp), c(Xp, le);
	var Up = "undefined" == typeof Float32Array ? Array : Float32Array,
		Yp = (Object.freeze || Object)({
			create: Le,
			identity: Oe,
			copy: Ee,
			mul: Be,
			translate: ze,
			rotate: Re,
			scale: Ne,
			invert: Fe,
			clone: Ve
		}),
		qp = Oe,
		jp = 5e-5,
		Zp = function(t) {
			t = t || {}, t.position || (this.position = [0, 0]), null == t.rotation && (this.rotation = 0), t.scale || (this.scale = [
				1, 1
			]), this.origin = this.origin || null
		},
		Kp = Zp.prototype;
	Kp.transform = null, Kp.needLocalTransform = function() {
		return He(this.rotation) || He(this.position[0]) || He(this.position[1]) || He(this.scale[0] - 1) || He(this.scale[
			1] - 1)
	};
	var $p = [];
	Kp.updateTransform = function() {
		var t = this.parent,
			e = t && t.transform,
			n = this.needLocalTransform(),
			i = this.transform;
		if (!n && !e) return void(i && qp(i));
		i = i || Le(), n ? this.getLocalTransform(i) : qp(i), e && (n ? Be(i, t.transform, i) : Ee(i, t.transform)), this.transform =
			i;
		var r = this.globalScaleRatio;
		if (null != r && 1 !== r) {
			this.getGlobalScale($p);
			var a = $p[0] < 0 ? -1 : 1,
				o = $p[1] < 0 ? -1 : 1,
				s = (($p[0] - a) * r + a) / $p[0] || 0,
				l = (($p[1] - o) * r + o) / $p[1] || 0;
			i[0] *= s, i[1] *= s, i[2] *= l, i[3] *= l
		}
		this.invTransform = this.invTransform || Le(), Fe(this.invTransform, i)
	}, Kp.getLocalTransform = function(t) {
		return Zp.getLocalTransform(this, t)
	}, Kp.setTransform = function(t) {
		var e = this.transform,
			n = t.dpr || 1;
		e ? t.setTransform(n * e[0], n * e[1], n * e[2], n * e[3], n * e[4], n * e[5]) : t.setTransform(n, 0, 0, n, 0, 0)
	}, Kp.restoreTransform = function(t) {
		var e = t.dpr || 1;
		t.setTransform(e, 0, 0, e, 0, 0)
	};
	var Qp = [],
		Jp = Le();
	Kp.setLocalTransform = function(t) {
		if (t) {
			var e = t[0] * t[0] + t[1] * t[1],
				n = t[2] * t[2] + t[3] * t[3],
				i = this.position,
				r = this.scale;
			He(e - 1) && (e = Math.sqrt(e)), He(n - 1) && (n = Math.sqrt(n)), t[0] < 0 && (e = -e), t[3] < 0 && (n = -n), i[0] =
				t[4], i[1] = t[5], r[0] = e, r[1] = n, this.rotation = Math.atan2(-t[1] / n, t[0] / e)
		}
	}, Kp.decomposeTransform = function() {
		if (this.transform) {
			var t = this.parent,
				e = this.transform;
			t && t.transform && (Be(Qp, t.invTransform, e), e = Qp);
			var n = this.origin;
			n && (n[0] || n[1]) && (Jp[4] = n[0], Jp[5] = n[1], Be(Qp, e, Jp), Qp[4] -= n[0], Qp[5] -= n[1], e = Qp), this.setLocalTransform(
				e)
		}
	}, Kp.getGlobalScale = function(t) {
		var e = this.transform;
		return t = t || [], e ? (t[0] = Math.sqrt(e[0] * e[0] + e[1] * e[1]), t[1] = Math.sqrt(e[2] * e[2] + e[3] * e[3]),
			e[0] < 0 && (t[0] = -t[0]), e[3] < 0 && (t[1] = -t[1]), t) : (t[0] = 1, t[1] = 1, t)
	}, Kp.transformCoordToLocal = function(t, e) {
		var n = [t, e],
			i = this.invTransform;
		return i && ae(n, n, i), n
	}, Kp.transformCoordToGlobal = function(t, e) {
		var n = [t, e],
			i = this.transform;
		return i && ae(n, n, i), n
	}, Zp.getLocalTransform = function(t, e) {
		e = e || [], qp(e);
		var n = t.origin,
			i = t.scale || [1, 1],
			r = t.rotation || 0,
			a = t.position || [0, 0];
		return n && (e[4] -= n[0], e[5] -= n[1]), Ne(e, e, i), r && Re(e, e, r), n && (e[4] += n[0], e[5] += n[1]), e[4] +=
			a[0], e[5] += a[1], e
	};
	var tg = {
		linear: function(t) {
			return t
		},
		quadraticIn: function(t) {
			return t * t
		},
		quadraticOut: function(t) {
			return t * (2 - t)
		},
		quadraticInOut: function(t) {
			return (t *= 2) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1)
		},
		cubicIn: function(t) {
			return t * t * t
		},
		cubicOut: function(t) {
			return --t * t * t + 1
		},
		cubicInOut: function(t) {
			return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
		},
		quarticIn: function(t) {
			return t * t * t * t
		},
		quarticOut: function(t) {
			return 1 - --t * t * t * t
		},
		quarticInOut: function(t) {
			return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2)
		},
		quinticIn: function(t) {
			return t * t * t * t * t
		},
		quinticOut: function(t) {
			return --t * t * t * t * t + 1
		},
		quinticInOut: function(t) {
			return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
		},
		sinusoidalIn: function(t) {
			return 1 - Math.cos(t * Math.PI / 2)
		},
		sinusoidalOut: function(t) {
			return Math.sin(t * Math.PI / 2)
		},
		sinusoidalInOut: function(t) {
			return .5 * (1 - Math.cos(Math.PI * t))
		},
		exponentialIn: function(t) {
			return 0 === t ? 0 : Math.pow(1024, t - 1)
		},
		exponentialOut: function(t) {
			return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
		},
		exponentialInOut: function(t) {
			return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (-Math.pow(2, -10 * (t - 1)) +
				2)
		},
		circularIn: function(t) {
			return 1 - Math.sqrt(1 - t * t)
		},
		circularOut: function(t) {
			return Math.sqrt(1 - --t * t)
		},
		circularInOut: function(t) {
			return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
		},
		elasticIn: function(t) {
			var e, n = .1,
				i = .4;
			return 0 === t ? 0 : 1 === t ? 1 : (!n || 1 > n ? (n = 1, e = i / 4) : e = i * Math.asin(1 / n) / (2 * Math.PI),
				-(n * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / i)))
		},
		elasticOut: function(t) {
			var e, n = .1,
				i = .4;
			return 0 === t ? 0 : 1 === t ? 1 : (!n || 1 > n ? (n = 1, e = i / 4) : e = i * Math.asin(1 / n) / (2 * Math.PI),
				n * Math.pow(2, -10 * t) * Math.sin(2 * (t - e) * Math.PI / i) + 1)
		},
		elasticInOut: function(t) {
			var e, n = .1,
				i = .4;
			return 0 === t ? 0 : 1 === t ? 1 : (!n || 1 > n ? (n = 1, e = i / 4) : e = i * Math.asin(1 / n) / (2 * Math.PI),
				(t *= 2) < 1 ? -.5 * n * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / i) : n * Math.pow(2, -10 *
					(t -= 1)) * Math.sin(2 * (t - e) * Math.PI / i) * .5 + 1)
		},
		backIn: function(t) {
			var e = 1.70158;
			return t * t * ((e + 1) * t - e)
		},
		backOut: function(t) {
			var e = 1.70158;
			return --t * t * ((e + 1) * t + e) + 1
		},
		backInOut: function(t) {
			var e = 2.5949095;
			return (t *= 2) < 1 ? .5 * t * t * ((e + 1) * t - e) : .5 * ((t -= 2) * t * ((e + 1) * t + e) + 2)
		},
		bounceIn: function(t) {
			return 1 - tg.bounceOut(1 - t)
		},
		bounceOut: function(t) {
			return 1 / 2.75 > t ? 7.5625 * t * t : 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : 2.5 / 2.75 > t ?
				7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
		},
		bounceInOut: function(t) {
			return .5 > t ? .5 * tg.bounceIn(2 * t) : .5 * tg.bounceOut(2 * t - 1) + .5
		}
	};
	Ge.prototype = {
		constructor: Ge,
		step: function(t, e) {
			if (this._initialized || (this._startTime = t + this._delay, this._initialized = !0), this._paused) return void(
				this._pausedTime += e);
			var n = (t - this._startTime - this._pausedTime) / this._life;
			if (!(0 > n)) {
				n = Math.min(n, 1);
				var i = this.easing,
					r = "string" == typeof i ? tg[i] : i,
					a = "function" == typeof r ? r(n) : n;
				return this.fire("frame", a), 1 === n ? this.loop ? (this.restart(t), "restart") : (this._needsRemove = !0,
					"destroy") : null
			}
		},
		restart: function(t) {
			var e = (t - this._startTime - this._pausedTime) % this._life;
			this._startTime = t - e + this.gap, this._pausedTime = 0, this._needsRemove = !1
		},
		fire: function(t, e) {
			t = "on" + t, this[t] && this[t](this._target, e)
		},
		pause: function() {
			this._paused = !0
		},
		resume: function() {
			this._paused = !1
		}
	};
	var eg = function() {
			this.head = null, this.tail = null, this._len = 0
		},
		ng = eg.prototype;
	ng.insert = function(t) {
		var e = new ig(t);
		return this.insertEntry(e), e
	}, ng.insertEntry = function(t) {
		this.head ? (this.tail.next = t, t.prev = this.tail, t.next = null, this.tail = t) : this.head = this.tail = t,
			this._len++
	}, ng.remove = function(t) {
		var e = t.prev,
			n = t.next;
		e ? e.next = n : this.head = n, n ? n.prev = e : this.tail = e, t.next = t.prev = null, this._len--
	}, ng.len = function() {
		return this._len
	}, ng.clear = function() {
		this.head = this.tail = null, this._len = 0
	};
	var ig = function(t) {
			this.value = t, this.next, this.prev
		},
		rg = function(t) {
			this._list = new eg, this._map = {}, this._maxSize = t || 10, this._lastRemovedEntry = null
		},
		ag = rg.prototype;
	ag.put = function(t, e) {
		var n = this._list,
			i = this._map,
			r = null;
		if (null == i[t]) {
			var a = n.len(),
				o = this._lastRemovedEntry;
			if (a >= this._maxSize && a > 0) {
				var s = n.head;
				n.remove(s), delete i[s.key], r = s.value, this._lastRemovedEntry = s
			}
			o ? o.value = e : o = new ig(e), o.key = t, n.insertEntry(o), i[t] = o
		}
		return r
	}, ag.get = function(t) {
		var e = this._map[t],
			n = this._list;
		return null != e ? (e !== n.tail && (n.remove(e), n.insertEntry(e)), e.value) : void 0
	}, ag.clear = function() {
		this._list.clear(), this._map = {}
	};
	var og = {
			transparent: [0, 0, 0, 0],
			aliceblue: [240, 248, 255, 1],
			antiquewhite: [250, 235, 215, 1],
			aqua: [0, 255, 255, 1],
			aquamarine: [127, 255, 212, 1],
			azure: [240, 255, 255, 1],
			beige: [245, 245, 220, 1],
			bisque: [255, 228, 196, 1],
			black: [0, 0, 0, 1],
			blanchedalmond: [255, 235, 205, 1],
			blue: [0, 0, 255, 1],
			blueviolet: [138, 43, 226, 1],
			brown: [165, 42, 42, 1],
			burlywood: [222, 184, 135, 1],
			cadetblue: [95, 158, 160, 1],
			chartreuse: [127, 255, 0, 1],
			chocolate: [210, 105, 30, 1],
			coral: [255, 127, 80, 1],
			cornflowerblue: [100, 149, 237, 1],
			cornsilk: [255, 248, 220, 1],
			crimson: [220, 20, 60, 1],
			cyan: [0, 255, 255, 1],
			darkblue: [0, 0, 139, 1],
			darkcyan: [0, 139, 139, 1],
			darkgoldenrod: [184, 134, 11, 1],
			darkgray: [169, 169, 169, 1],
			darkgreen: [0, 100, 0, 1],
			darkgrey: [169, 169, 169, 1],
			darkkhaki: [189, 183, 107, 1],
			darkmagenta: [139, 0, 139, 1],
			darkolivegreen: [85, 107, 47, 1],
			darkorange: [255, 140, 0, 1],
			darkorchid: [153, 50, 204, 1],
			darkred: [139, 0, 0, 1],
			darksalmon: [233, 150, 122, 1],
			darkseagreen: [143, 188, 143, 1],
			darkslateblue: [72, 61, 139, 1],
			darkslategray: [47, 79, 79, 1],
			darkslategrey: [47, 79, 79, 1],
			darkturquoise: [0, 206, 209, 1],
			darkviolet: [148, 0, 211, 1],
			deeppink: [255, 20, 147, 1],
			deepskyblue: [0, 191, 255, 1],
			dimgray: [105, 105, 105, 1],
			dimgrey: [105, 105, 105, 1],
			dodgerblue: [30, 144, 255, 1],
			firebrick: [178, 34, 34, 1],
			floralwhite: [255, 250, 240, 1],
			forestgreen: [34, 139, 34, 1],
			fuchsia: [255, 0, 255, 1],
			gainsboro: [220, 220, 220, 1],
			ghostwhite: [248, 248, 255, 1],
			gold: [255, 215, 0, 1],
			goldenrod: [218, 165, 32, 1],
			gray: [128, 128, 128, 1],
			green: [0, 128, 0, 1],
			greenyellow: [173, 255, 47, 1],
			grey: [128, 128, 128, 1],
			honeydew: [240, 255, 240, 1],
			hotpink: [255, 105, 180, 1],
			indianred: [205, 92, 92, 1],
			indigo: [75, 0, 130, 1],
			ivory: [255, 255, 240, 1],
			khaki: [240, 230, 140, 1],
			lavender: [230, 230, 250, 1],
			lavenderblush: [255, 240, 245, 1],
			lawngreen: [124, 252, 0, 1],
			lemonchiffon: [255, 250, 205, 1],
			lightblue: [173, 216, 230, 1],
			lightcoral: [240, 128, 128, 1],
			lightcyan: [224, 255, 255, 1],
			lightgoldenrodyellow: [250, 250, 210, 1],
			lightgray: [211, 211, 211, 1],
			lightgreen: [144, 238, 144, 1],
			lightgrey: [211, 211, 211, 1],
			lightpink: [255, 182, 193, 1],
			lightsalmon: [255, 160, 122, 1],
			lightseagreen: [32, 178, 170, 1],
			lightskyblue: [135, 206, 250, 1],
			lightslategray: [119, 136, 153, 1],
			lightslategrey: [119, 136, 153, 1],
			lightsteelblue: [176, 196, 222, 1],
			lightyellow: [255, 255, 224, 1],
			lime: [0, 255, 0, 1],
			limegreen: [50, 205, 50, 1],
			linen: [250, 240, 230, 1],
			magenta: [255, 0, 255, 1],
			maroon: [128, 0, 0, 1],
			mediumaquamarine: [102, 205, 170, 1],
			mediumblue: [0, 0, 205, 1],
			mediumorchid: [186, 85, 211, 1],
			mediumpurple: [147, 112, 219, 1],
			mediumseagreen: [60, 179, 113, 1],
			mediumslateblue: [123, 104, 238, 1],
			mediumspringgreen: [0, 250, 154, 1],
			mediumturquoise: [72, 209, 204, 1],
			mediumvioletred: [199, 21, 133, 1],
			midnightblue: [25, 25, 112, 1],
			mintcream: [245, 255, 250, 1],
			mistyrose: [255, 228, 225, 1],
			moccasin: [255, 228, 181, 1],
			navajowhite: [255, 222, 173, 1],
			navy: [0, 0, 128, 1],
			oldlace: [253, 245, 230, 1],
			olive: [128, 128, 0, 1],
			olivedrab: [107, 142, 35, 1],
			orange: [255, 165, 0, 1],
			orangered: [255, 69, 0, 1],
			orchid: [218, 112, 214, 1],
			palegoldenrod: [238, 232, 170, 1],
			palegreen: [152, 251, 152, 1],
			paleturquoise: [175, 238, 238, 1],
			palevioletred: [219, 112, 147, 1],
			papayawhip: [255, 239, 213, 1],
			peachpuff: [255, 218, 185, 1],
			peru: [205, 133, 63, 1],
			pink: [255, 192, 203, 1],
			plum: [221, 160, 221, 1],
			powderblue: [176, 224, 230, 1],
			purple: [128, 0, 128, 1],
			red: [255, 0, 0, 1],
			rosybrown: [188, 143, 143, 1],
			royalblue: [65, 105, 225, 1],
			saddlebrown: [139, 69, 19, 1],
			salmon: [250, 128, 114, 1],
			sandybrown: [244, 164, 96, 1],
			seagreen: [46, 139, 87, 1],
			seashell: [255, 245, 238, 1],
			sienna: [160, 82, 45, 1],
			silver: [192, 192, 192, 1],
			skyblue: [135, 206, 235, 1],
			slateblue: [106, 90, 205, 1],
			slategray: [112, 128, 144, 1],
			slategrey: [112, 128, 144, 1],
			snow: [255, 250, 250, 1],
			springgreen: [0, 255, 127, 1],
			steelblue: [70, 130, 180, 1],
			tan: [210, 180, 140, 1],
			teal: [0, 128, 128, 1],
			thistle: [216, 191, 216, 1],
			tomato: [255, 99, 71, 1],
			turquoise: [64, 224, 208, 1],
			violet: [238, 130, 238, 1],
			wheat: [245, 222, 179, 1],
			white: [255, 255, 255, 1],
			whitesmoke: [245, 245, 245, 1],
			yellow: [255, 255, 0, 1],
			yellowgreen: [154, 205, 50, 1]
		},
		sg = new rg(20),
		lg = null,
		ug = an,
		hg = on,
		cg = (Object.freeze || Object)({
			parse: Je,
			lift: nn,
			toHex: rn,
			fastLerp: an,
			fastMapToColor: ug,
			lerp: on,
			mapToColor: hg,
			modifyHSL: sn,
			modifyAlpha: ln,
			stringify: un
		}),
		dg = Array.prototype.slice,
		fg = function(t, e, n, i) {
			this._tracks = {}, this._target = t, this._loop = e || !1, this._getter = n || hn, this._setter = i || cn, this._clipCount =
				0, this._delay = 0, this._doneList = [], this._onframeList = [], this._clipList = []
		};
	fg.prototype = {
		when: function(t, e) {
			var n = this._tracks;
			for (var i in e)
				if (e.hasOwnProperty(i)) {
					if (!n[i]) {
						n[i] = [];
						var r = this._getter(this._target, i);
						if (null == r) continue;
						0 !== t && n[i].push({
							time: 0,
							value: xn(r)
						})
					}
					n[i].push({
						time: t,
						value: e[i]
					})
				} return this
		},
		during: function(t) {
			return this._onframeList.push(t), this
		},
		pause: function() {
			for (var t = 0; t < this._clipList.length; t++) this._clipList[t].pause();
			this._paused = !0
		},
		resume: function() {
			for (var t = 0; t < this._clipList.length; t++) this._clipList[t].resume();
			this._paused = !1
		},
		isPaused: function() {
			return !!this._paused
		},
		_doneCallback: function() {
			this._tracks = {}, this._clipList.length = 0;
			for (var t = this._doneList, e = t.length, n = 0; e > n; n++) t[n].call(this)
		},
		start: function(t, e) {
			var n, i = this,
				r = 0,
				a = function() {
					r--, r || i._doneCallback()
				};
			for (var o in this._tracks)
				if (this._tracks.hasOwnProperty(o)) {
					var s = bn(this, t, a, this._tracks[o], o, e);
					s && (this._clipList.push(s), r++, this.animation && this.animation.addClip(s), n = s)
				} if (n) {
				var l = n.onframe;
				n.onframe = function(t, e) {
					l(t, e);
					for (var n = 0; n < i._onframeList.length; n++) i._onframeList[n](t, e)
				}
			}
			return r || this._doneCallback(), this
		},
		stop: function(t) {
			for (var e = this._clipList, n = this.animation, i = 0; i < e.length; i++) {
				var r = e[i];
				t && r.onframe(this._target, 1), n && n.removeClip(r)
			}
			e.length = 0
		},
		delay: function(t) {
			return this._delay = t, this
		},
		done: function(t) {
			return t && this._doneList.push(t), this
		},
		getClips: function() {
			return this._clipList
		}
	};
	var pg = 1;
	"undefined" != typeof window && (pg = Math.max(window.devicePixelRatio || 1, 1));
	var gg = 0,
		vg = pg,
		mg = function() {};
	1 === gg && (mg = console.error);
	var yg = mg,
		xg = function() {
			this.animators = []
		};
	xg.prototype = {
		constructor: xg,
		animate: function(t, e) {
			var n, i = !1,
				r = this,
				a = this.__zr;
			if (t) {
				var o = t.split("."),
					s = r;
				i = "shape" === o[0];
				for (var l = 0, h = o.length; h > l; l++) s && (s = s[o[l]]);
				s && (n = s)
			} else n = r;
			if (!n) return void yg('Property "' + t + '" is not existed in element ' + r.id);
			var c = r.animators,
				d = new fg(n, e);
			return d.during(function() {
				r.dirty(i)
			}).done(function() {
				c.splice(u(c, d), 1)
			}), c.push(d), a && a.animation.addAnimator(d), d
		},
		stopAnimation: function(t) {
			for (var e = this.animators, n = e.length, i = 0; n > i; i++) e[i].stop(t);
			return e.length = 0, this
		},
		animateTo: function(t, e, n, i, r, a) {
			Sn(this, t, e, n, i, r, a)
		},
		animateFrom: function(t, e, n, i, r, a) {
			Sn(this, t, e, n, i, r, a, !0)
		}
	};
	var _g = function(t) {
		Zp.call(this, t), Lp.call(this, t), xg.call(this, t), this.id = t.id || lp()
	};
	_g.prototype = {
		type: "element",
		name: "",
		__zr: null,
		ignore: !1,
		clipPath: null,
		isGroup: !1,
		drift: function(t, e) {
			switch (this.draggable) {
				case "horizontal":
					e = 0;
					break;
				case "vertical":
					t = 0
			}
			var n = this.transform;
			n || (n = this.transform = [1, 0, 0, 1, 0, 0]), n[4] += t, n[5] += e, this.decomposeTransform(), this.dirty(!1)
		},
		beforeUpdate: function() {},
		afterUpdate: function() {},
		update: function() {
			this.updateTransform()
		},
		traverse: function() {},
		attrKV: function(t, e) {
			if ("position" === t || "scale" === t || "origin" === t) {
				if (e) {
					var n = this[t];
					n || (n = this[t] = []), n[0] = e[0], n[1] = e[1]
				}
			} else this[t] = e
		},
		hide: function() {
			this.ignore = !0, this.__zr && this.__zr.refresh()
		},
		show: function() {
			this.ignore = !1, this.__zr && this.__zr.refresh()
		},
		attr: function(t, e) {
			if ("string" == typeof t) this.attrKV(t, e);
			else if (S(t))
				for (var n in t) t.hasOwnProperty(n) && this.attrKV(n, t[n]);
			return this.dirty(!1), this
		},
		setClipPath: function(t) {
			var e = this.__zr;
			e && t.addSelfToZr(e), this.clipPath && this.clipPath !== t && this.removeClipPath(), this.clipPath = t, t.__zr =
				e, t.__clipTarget = this, this.dirty(!1)
		},
		removeClipPath: function() {
			var t = this.clipPath;
			t && (t.__zr && t.removeSelfFromZr(t.__zr), t.__zr = null, t.__clipTarget = null, this.clipPath = null, this.dirty(
				!1))
		},
		addSelfToZr: function(t) {
			this.__zr = t;
			var e = this.animators;
			if (e)
				for (var n = 0; n < e.length; n++) t.animation.addAnimator(e[n]);
			this.clipPath && this.clipPath.addSelfToZr(t)
		},
		removeSelfFromZr: function(t) {
			this.__zr = null;
			var e = this.animators;
			if (e)
				for (var n = 0; n < e.length; n++) t.animation.removeAnimator(e[n]);
			this.clipPath && this.clipPath.removeSelfFromZr(t)
		}
	}, c(_g, xg), c(_g, Zp), c(_g, Lp);
	var wg = ae,
		bg = Math.min,
		Sg = Math.max;
	Tn.prototype = {
		constructor: Tn,
		union: function(t) {
			var e = bg(t.x, this.x),
				n = bg(t.y, this.y);
			this.width = Sg(t.x + t.width, this.x + this.width) - e, this.height = Sg(t.y + t.height, this.y + this.height) -
				n, this.x = e, this.y = n
		},
		applyTransform: function() {
			var t = [],
				e = [],
				n = [],
				i = [];
			return function(r) {
				if (r) {
					t[0] = n[0] = this.x, t[1] = i[1] = this.y, e[0] = i[0] = this.x + this.width, e[1] = n[1] = this.y + this.height,
						wg(t, t, r), wg(e, e, r), wg(n, n, r), wg(i, i, r), this.x = bg(t[0], e[0], n[0], i[0]), this.y = bg(t[1], e[
							1], n[1], i[1]);
					var a = Sg(t[0], e[0], n[0], i[0]),
						o = Sg(t[1], e[1], n[1], i[1]);
					this.width = a - this.x, this.height = o - this.y
				}
			}
		}(),
		calculateTransform: function(t) {
			var e = this,
				n = t.width / e.width,
				i = t.height / e.height,
				r = Le();
			return ze(r, r, [-e.x, -e.y]), Ne(r, r, [n, i]), ze(r, r, [t.x, t.y]), r
		},
		intersect: function(t) {
			if (!t) return !1;
			t instanceof Tn || (t = Tn.create(t));
			var e = this,
				n = e.x,
				i = e.x + e.width,
				r = e.y,
				a = e.y + e.height,
				o = t.x,
				s = t.x + t.width,
				l = t.y,
				u = t.y + t.height;
			return !(o > i || n > s || l > a || r > u)
		},
		contain: function(t, e) {
			var n = this;
			return t >= n.x && t <= n.x + n.width && e >= n.y && e <= n.y + n.height
		},
		clone: function() {
			return new Tn(this.x, this.y, this.width, this.height)
		},
		copy: function(t) {
			this.x = t.x, this.y = t.y, this.width = t.width, this.height = t.height
		},
		plain: function() {
			return {
				x: this.x,
				y: this.y,
				width: this.width,
				height: this.height
			}
		}
	}, Tn.create = function(t) {
		return new Tn(t.x, t.y, t.width, t.height)
	};
	var Mg = function(t) {
		t = t || {}, _g.call(this, t);
		for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
		this._children = [], this.__storage = null, this.__dirty = !0
	};
	Mg.prototype = {
		constructor: Mg,
		isGroup: !0,
		type: "group",
		silent: !1,
		children: function() {
			return this._children.slice()
		},
		childAt: function(t) {
			return this._children[t]
		},
		childOfName: function(t) {
			for (var e = this._children, n = 0; n < e.length; n++)
				if (e[n].name === t) return e[n]
		},
		childCount: function() {
			return this._children.length
		},
		add: function(t) {
			return t && t !== this && t.parent !== this && (this._children.push(t), this._doAdd(t)), this
		},
		addBefore: function(t, e) {
			if (t && t !== this && t.parent !== this && e && e.parent === this) {
				var n = this._children,
					i = n.indexOf(e);
				i >= 0 && (n.splice(i, 0, t), this._doAdd(t))
			}
			return this
		},
		_doAdd: function(t) {
			t.parent && t.parent.remove(t), t.parent = this;
			var e = this.__storage,
				n = this.__zr;
			e && e !== t.__storage && (e.addToStorage(t), t instanceof Mg && t.addChildrenToStorage(e)), n && n.refresh()
		},
		remove: function(t) {
			var e = this.__zr,
				n = this.__storage,
				i = this._children,
				r = u(i, t);
			return 0 > r ? this : (i.splice(r, 1), t.parent = null, n && (n.delFromStorage(t), t instanceof Mg && t.delChildrenFromStorage(
				n)), e && e.refresh(), this)
		},
		removeAll: function() {
			var t, e, n = this._children,
				i = this.__storage;
			for (e = 0; e < n.length; e++) t = n[e], i && (i.delFromStorage(t), t instanceof Mg && t.delChildrenFromStorage(i)),
				t.parent = null;
			return n.length = 0, this
		},
		eachChild: function(t, e) {
			for (var n = this._children, i = 0; i < n.length; i++) {
				var r = n[i];
				t.call(e, r, i)
			}
			return this
		},
		traverse: function(t, e) {
			for (var n = 0; n < this._children.length; n++) {
				var i = this._children[n];
				t.call(e, i), "group" === i.type && i.traverse(t, e)
			}
			return this
		},
		addChildrenToStorage: function(t) {
			for (var e = 0; e < this._children.length; e++) {
				var n = this._children[e];
				t.addToStorage(n), n instanceof Mg && n.addChildrenToStorage(t)
			}
		},
		delChildrenFromStorage: function(t) {
			for (var e = 0; e < this._children.length; e++) {
				var n = this._children[e];
				t.delFromStorage(n), n instanceof Mg && n.delChildrenFromStorage(t)
			}
		},
		dirty: function() {
			return this.__dirty = !0, this.__zr && this.__zr.refresh(), this
		},
		getBoundingRect: function(t) {
			for (var e = null, n = new Tn(0, 0, 0, 0), i = t || this._children, r = [], a = 0; a < i.length; a++) {
				var o = i[a];
				if (!o.ignore && !o.invisible) {
					var s = o.getBoundingRect(),
						l = o.getLocalTransform(r);
					l ? (n.copy(s), n.applyTransform(l), e = e || n.clone(), e.union(n)) : (e = e || s.clone(), e.union(s))
				}
			}
			return e || n
		}
	}, h(Mg, _g);
	var Ig = 32,
		Tg = 7,
		Cg = function() {
			this._roots = [], this._displayList = [], this._displayListLen = 0
		};
	Cg.prototype = {
		constructor: Cg,
		traverse: function(t, e) {
			for (var n = 0; n < this._roots.length; n++) this._roots[n].traverse(t, e)
		},
		getDisplayList: function(t, e) {
			return e = e || !1, t && this.updateDisplayList(e), this._displayList
		},
		updateDisplayList: function(t) {
			this._displayListLen = 0;
			for (var e = this._roots, n = this._displayList, i = 0, r = e.length; r > i; i++) this._updateAndAddDisplayable(e[
				i], null, t);
			n.length = this._displayListLen, hp.canvasSupported && En(n, Bn)
		},
		_updateAndAddDisplayable: function(t, e, n) {
			if (!t.ignore || n) {
				t.beforeUpdate(), t.__dirty && t.update(), t.afterUpdate();
				var i = t.clipPath;
				if (i) {
					e = e ? e.slice() : [];
					for (var r = i, a = t; r;) r.parent = a, r.updateTransform(), e.push(r), a = r, r = r.clipPath
				}
				if (t.isGroup) {
					for (var o = t._children, s = 0; s < o.length; s++) {
						var l = o[s];
						t.__dirty && (l.__dirty = !0), this._updateAndAddDisplayable(l, e, n)
					}
					t.__dirty = !1
				} else t.__clipPaths = e, this._displayList[this._displayListLen++] = t
			}
		},
		addRoot: function(t) {
			t.__storage !== this && (t instanceof Mg && t.addChildrenToStorage(this), this.addToStorage(t), this._roots.push(
				t))
		},
		delRoot: function(t) {
			if (null == t) {
				for (var e = 0; e < this._roots.length; e++) {
					var n = this._roots[e];
					n instanceof Mg && n.delChildrenFromStorage(this)
				}
				return this._roots = [], this._displayList = [], void(this._displayListLen = 0)
			}
			if (t instanceof Array)
				for (var e = 0, i = t.length; i > e; e++) this.delRoot(t[e]);
			else {
				var r = u(this._roots, t);
				r >= 0 && (this.delFromStorage(t), this._roots.splice(r, 1), t instanceof Mg && t.delChildrenFromStorage(this))
			}
		},
		addToStorage: function(t) {
			return t && (t.__storage = this, t.dirty(!1)), this
		},
		delFromStorage: function(t) {
			return t && (t.__storage = null), this
		},
		dispose: function() {
			this._renderList = this._roots = null
		},
		displayableSortFunc: Bn
	};
	var Ag = {
			shadowBlur: 1,
			shadowOffsetX: 1,
			shadowOffsetY: 1,
			textShadowBlur: 1,
			textShadowOffsetX: 1,
			textShadowOffsetY: 1,
			textBoxShadowBlur: 1,
			textBoxShadowOffsetX: 1,
			textBoxShadowOffsetY: 1
		},
		Dg = function(t, e, n) {
			return Ag.hasOwnProperty(e) ? n *= t.dpr : n
		},
		kg = {
			NONE: 0,
			STYLE_BIND: 1,
			PLAIN_TEXT: 2
		},
		Pg = 9,
		Lg = [
			["shadowBlur", 0],
			["shadowOffsetX", 0],
			["shadowOffsetY", 0],
			["shadowColor", "#000"],
			["lineCap", "butt"],
			["lineJoin", "miter"],
			["miterLimit", 10]
		],
		Og = function(t) {
			this.extendFrom(t, !1)
		};
	Og.prototype = {
		constructor: Og,
		fill: "#000",
		stroke: null,
		opacity: 1,
		fillOpacity: null,
		strokeOpacity: null,
		lineDash: null,
		lineDashOffset: 0,
		shadowBlur: 0,
		shadowOffsetX: 0,
		shadowOffsetY: 0,
		lineWidth: 1,
		strokeNoScale: !1,
		text: null,
		font: null,
		textFont: null,
		fontStyle: null,
		fontWeight: null,
		fontSize: null,
		fontFamily: null,
		textTag: null,
		textFill: "#000",
		textStroke: null,
		textWidth: null,
		textHeight: null,
		textStrokeWidth: 0,
		textLineHeight: null,
		textPosition: "inside",
		textRect: null,
		textOffset: null,
		textAlign: null,
		textVerticalAlign: null,
		textDistance: 5,
		textShadowColor: "transparent",
		textShadowBlur: 0,
		textShadowOffsetX: 0,
		textShadowOffsetY: 0,
		textBoxShadowColor: "transparent",
		textBoxShadowBlur: 0,
		textBoxShadowOffsetX: 0,
		textBoxShadowOffsetY: 0,
		transformText: !1,
		textRotation: 0,
		textOrigin: null,
		textBackgroundColor: null,
		textBorderColor: null,
		textBorderWidth: 0,
		textBorderRadius: 0,
		textPadding: null,
		rich: null,
		truncate: null,
		blend: null,
		bind: function(t, e, n) {
			var i = this,
				r = n && n.style,
				a = !r || t.__attrCachedBy !== kg.STYLE_BIND;
			t.__attrCachedBy = kg.STYLE_BIND;
			for (var o = 0; o < Lg.length; o++) {
				var s = Lg[o],
					l = s[0];
				(a || i[l] !== r[l]) && (t[l] = Dg(t, l, i[l] || s[1]))
			}
			if ((a || i.fill !== r.fill) && (t.fillStyle = i.fill), (a || i.stroke !== r.stroke) && (t.strokeStyle = i.stroke),
				(a || i.opacity !== r.opacity) && (t.globalAlpha = null == i.opacity ? 1 : i.opacity), (a || i.blend !== r.blend) &&
				(t.globalCompositeOperation = i.blend || "source-over"), this.hasStroke()) {
				var u = i.lineWidth;
				t.lineWidth = u / (this.strokeNoScale && e && e.getLineScale ? e.getLineScale() : 1)
			}
		},
		hasFill: function() {
			var t = this.fill;
			return null != t && "none" !== t
		},
		hasStroke: function() {
			var t = this.stroke;
			return null != t && "none" !== t && this.lineWidth > 0
		},
		extendFrom: function(t, e) {
			if (t)
				for (var n in t) !t.hasOwnProperty(n) || e !== !0 && (e === !1 ? this.hasOwnProperty(n) : null == t[n]) || (this[
					n] = t[n])
		},
		set: function(t, e) {
			"string" == typeof t ? this[t] = e : this.extendFrom(t, !0)
		},
		clone: function() {
			var t = new this.constructor;
			return t.extendFrom(this, !0), t
		},
		getGradient: function(t, e, n) {
			for (var i = "radial" === e.type ? Rn : zn, r = i(t, e, n), a = e.colorStops, o = 0; o < a.length; o++) r.addColorStop(
				a[o].offset, a[o].color);
			return r
		}
	};
	for (var Eg = Og.prototype, Bg = 0; Bg < Lg.length; Bg++) {
		var zg = Lg[Bg];
		zg[0] in Eg || (Eg[zg[0]] = zg[1])
	}
	Og.getGradient = Eg.getGradient;
	var Rg = function(t, e) {
		this.image = t, this.repeat = e, this.type = "pattern"
	};
	Rg.prototype.getCanvasPattern = function(t) {
		return t.createPattern(this.image, this.repeat || "repeat")
	};
	var Ng = function(t, e, n) {
		var i;
		n = n || vg, "string" == typeof t ? i = Fn(t, e, n) : S(t) && (i = t, t = i.id), this.id = t, this.dom = i;
		var r = i.style;
		r && (i.onselectstart = Nn, r["-webkit-user-select"] = "none", r["user-select"] = "none", r["-webkit-touch-callout"] =
				"none", r["-webkit-tap-highlight-color"] = "rgba(0,0,0,0)", r.padding = 0, r.margin = 0, r["border-width"] = 0),
			this.domBack = null, this.ctxBack = null, this.painter = e, this.config = null, this.clearColor = 0, this.motionBlur = !
			1, this.lastFrameAlpha = .7, this.dpr = n
	};
	Ng.prototype = {
		constructor: Ng,
		__dirty: !0,
		__used: !1,
		__drawIndex: 0,
		__startIndex: 0,
		__endIndex: 0,
		incremental: !1,
		getElementCount: function() {
			return this.__endIndex - this.__startIndex
		},
		initContext: function() {
			this.ctx = this.dom.getContext("2d"), this.ctx.dpr = this.dpr
		},
		createBackBuffer: function() {
			var t = this.dpr;
			this.domBack = Fn("back-" + this.id, this.painter, t), this.ctxBack = this.domBack.getContext("2d"), 1 !== t &&
				this.ctxBack.scale(t, t)
		},
		resize: function(t, e) {
			var n = this.dpr,
				i = this.dom,
				r = i.style,
				a = this.domBack;
			r && (r.width = t + "px", r.height = e + "px"), i.width = t * n, i.height = e * n, a && (a.width = t * n, a.height =
				e * n, 1 !== n && this.ctxBack.scale(n, n))
		},
		clear: function(t, e) {
			var n = this.dom,
				i = this.ctx,
				r = n.width,
				a = n.height,
				e = e || this.clearColor,
				o = this.motionBlur && !t,
				s = this.lastFrameAlpha,
				l = this.dpr;
			if (o && (this.domBack || this.createBackBuffer(), this.ctxBack.globalCompositeOperation = "copy", this.ctxBack.drawImage(
					n, 0, 0, r / l, a / l)), i.clearRect(0, 0, r, a), e && "transparent" !== e) {
				var u;
				e.colorStops ? (u = e.__canvasGradient || Og.getGradient(i, e, {
						x: 0,
						y: 0,
						width: r,
						height: a
					}), e.__canvasGradient = u) : e.image && (u = Rg.prototype.getCanvasPattern.call(e, i)), i.save(), i.fillStyle =
					u || e, i.fillRect(0, 0, r, a), i.restore()
			}
			if (o) {
				var h = this.domBack;
				i.save(), i.globalAlpha = s, i.drawImage(h, 0, 0, r, a), i.restore()
			}
		}
	};
	var Fg = "undefined" != typeof window && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) ||
			window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame ||
			window.webkitRequestAnimationFrame) || function(t) {
			setTimeout(t, 16)
		},
		Vg = new rg(50),
		Hg = {},
		Gg = 0,
		Wg = 5e3,
		Xg = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g,
		Ug = "12px sans-serif",
		Yg = {};
	Yg.measureText = function(t, e) {
		var n = l();
		return n.font = e || Ug, n.measureText(t)
	};
	var qg = Ug,
		jg = {
			left: 1,
			right: 1,
			center: 1
		},
		Zg = {
			top: 1,
			bottom: 1,
			middle: 1
		},
		Kg = [
			["textShadowBlur", "shadowBlur", 0],
			["textShadowOffsetX", "shadowOffsetX", 0],
			["textShadowOffsetY", "shadowOffsetY", 0],
			["textShadowColor", "shadowColor", "transparent"]
		],
		$g = {},
		Qg = {},
		Jg = new Tn,
		tv = function() {};
	tv.prototype = {
		constructor: tv,
		drawRectText: function(t, e) {
			var n = this.style;
			e = n.textRect || e, this.__dirty && li(n, !0);
			var i = n.text;
			if (null != i && (i += ""), Ii(i, n)) {
				t.save();
				var r = this.transform;
				n.transformText ? this.setTransform(t) : r && (Jg.copy(e), Jg.applyTransform(r), e = Jg), hi(this, t, i, n, e,
					Pg), t.restore()
			}
		}
	}, Ti.prototype = {
		constructor: Ti,
		type: "displayable",
		__dirty: !0,
		invisible: !1,
		z: 0,
		z2: 0,
		zlevel: 0,
		draggable: !1,
		dragging: !1,
		silent: !1,
		culling: !1,
		cursor: "pointer",
		rectHover: !1,
		progressive: !1,
		incremental: !1,
		globalScaleRatio: 1,
		beforeBrush: function() {},
		afterBrush: function() {},
		brush: function() {},
		getBoundingRect: function() {},
		contain: function(t, e) {
			return this.rectContain(t, e)
		},
		traverse: function(t, e) {
			t.call(e, this)
		},
		rectContain: function(t, e) {
			var n = this.transformCoordToLocal(t, e),
				i = this.getBoundingRect();
			return i.contain(n[0], n[1])
		},
		dirty: function() {
			this.__dirty = this.__dirtyText = !0, this._rect = null, this.__zr && this.__zr.refresh()
		},
		animateStyle: function(t) {
			return this.animate("style", t)
		},
		attrKV: function(t, e) {
			"style" !== t ? _g.prototype.attrKV.call(this, t, e) : this.style.set(e)
		},
		setStyle: function(t, e) {
			return this.style.set(t, e), this.dirty(!1), this
		},
		useStyle: function(t) {
			return this.style = new Og(t, this), this.dirty(!1), this
		},
		calculateTextPosition: null
	}, h(Ti, _g), c(Ti, tv), Ci.prototype = {
		constructor: Ci,
		type: "image",
		brush: function(t, e) {
			var n = this.style,
				i = n.image;
			n.bind(t, this, e);
			var r = this._image = Hn(i, this._image, this, this.onload);
			if (r && Wn(r)) {
				var a = n.x || 0,
					o = n.y || 0,
					s = n.width,
					l = n.height,
					u = r.width / r.height;
				if (null == s && null != l ? s = l * u : null == l && null != s ? l = s / u : null == s && null == l && (s = r.width,
						l = r.height), this.setTransform(t), n.sWidth && n.sHeight) {
					var h = n.sx || 0,
						c = n.sy || 0;
					t.drawImage(r, h, c, n.sWidth, n.sHeight, a, o, s, l)
				} else if (n.sx && n.sy) {
					var h = n.sx,
						c = n.sy,
						d = s - h,
						f = l - c;
					t.drawImage(r, h, c, d, f, a, o, s, l)
				} else t.drawImage(r, a, o, s, l);
				null != n.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect()))
			}
		},
		getBoundingRect: function() {
			var t = this.style;
			return this._rect || (this._rect = new Tn(t.x || 0, t.y || 0, t.width || 0, t.height || 0)), this._rect
		}
	}, h(Ci, Ti);
	var ev = 1e5,
		nv = 314159,
		iv = .01,
		rv = .001,
		av = new Tn(0, 0, 0, 0),
		ov = new Tn(0, 0, 0, 0),
		sv = function(t, e, n) {
			this.type = "canvas";
			var i = !t.nodeName || "CANVAS" === t.nodeName.toUpperCase();
			this._opts = n = o({}, n || {}), this.dpr = n.devicePixelRatio || vg, this._singleCanvas = i, this.root = t;
			var r = t.style;
			r && (r["-webkit-tap-highlight-color"] = "transparent", r["-webkit-user-select"] = r["user-select"] = r[
				"-webkit-touch-callout"] = "none", t.innerHTML = ""), this.storage = e;
			var a = this._zlevelList = [],
				s = this._layers = {};
			if (this._layerConfig = {}, this._needsManuallyCompositing = !1, i) {
				var l = t.width,
					u = t.height;
				null != n.width && (l = n.width), null != n.height && (u = n.height), this.dpr = n.devicePixelRatio || 1, t.width =
					l * this.dpr, t.height = u * this.dpr, this._width = l, this._height = u;
				var h = new Ng(t, this, this.dpr);
				h.__builtin__ = !0, h.initContext(), s[nv] = h, h.zlevel = nv, a.push(nv), this._domRoot = t
			} else {
				this._width = this._getSize(0), this._height = this._getSize(1);
				var c = this._domRoot = Oi(this._width, this._height);
				t.appendChild(c)
			}
			this._hoverlayer = null, this._hoverElements = []
		};
	sv.prototype = {
		constructor: sv,
		getType: function() {
			return "canvas"
		},
		isSingleCanvas: function() {
			return this._singleCanvas
		},
		getViewportRoot: function() {
			return this._domRoot
		},
		getViewportRootOffset: function() {
			var t = this.getViewportRoot();
			return t ? {
				offsetLeft: t.offsetLeft || 0,
				offsetTop: t.offsetTop || 0
			} : void 0
		},
		refresh: function(t) {
			var e = this.storage.getDisplayList(!0),
				n = this._zlevelList;
			this._redrawId = Math.random(), this._paintList(e, t, this._redrawId);
			for (var i = 0; i < n.length; i++) {
				var r = n[i],
					a = this._layers[r];
				if (!a.__builtin__ && a.refresh) {
					var o = 0 === i ? this._backgroundColor : null;
					a.refresh(o)
				}
			}
			return this.refreshHover(), this
		},
		addHover: function(t, e) {
			if (!t.__hoverMir) {
				var n = new t.constructor({
					style: t.style,
					shape: t.shape,
					z: t.z,
					z2: t.z2,
					silent: t.silent
				});
				return n.__from = t, t.__hoverMir = n, e && n.setStyle(e), this._hoverElements.push(n), n
			}
		},
		removeHover: function(t) {
			var e = t.__hoverMir,
				n = this._hoverElements,
				i = u(n, e);
			i >= 0 && n.splice(i, 1), t.__hoverMir = null
		},
		clearHover: function() {
			for (var t = this._hoverElements, e = 0; e < t.length; e++) {
				var n = t[e].__from;
				n && (n.__hoverMir = null)
			}
			t.length = 0
		},
		refreshHover: function() {
			var t = this._hoverElements,
				e = t.length,
				n = this._hoverlayer;
			if (n && n.clear(), e) {
				En(t, this.storage.displayableSortFunc), n || (n = this._hoverlayer = this.getLayer(ev));
				var i = {};
				n.ctx.save();
				for (var r = 0; e > r;) {
					var a = t[r],
						o = a.__from;
					o && o.__zr ? (r++, o.invisible || (a.transform = o.transform, a.invTransform = o.invTransform, a.__clipPaths =
						o.__clipPaths, this._doPaintEl(a, n, !0, i))) : (t.splice(r, 1), o.__hoverMir = null, e--)
				}
				n.ctx.restore()
			}
		},
		getHoverLayer: function() {
			return this.getLayer(ev)
		},
		_paintList: function(t, e, n) {
			if (this._redrawId === n) {
				e = e || !1, this._updateLayerStatus(t);
				var i = this._doPaintList(t, e);
				if (this._needsManuallyCompositing && this._compositeManually(), !i) {
					var r = this;
					Fg(function() {
						r._paintList(t, e, n)
					})
				}
			}
		},
		_compositeManually: function() {
			var t = this.getLayer(nv).ctx,
				e = this._domRoot.width,
				n = this._domRoot.height;
			t.clearRect(0, 0, e, n), this.eachBuiltinLayer(function(i) {
				i.virtual && t.drawImage(i.dom, 0, 0, e, n)
			})
		},
		_doPaintList: function(t, e) {
			for (var n = [], i = 0; i < this._zlevelList.length; i++) {
				var r = this._zlevelList[i],
					a = this._layers[r];
				a.__builtin__ && a !== this._hoverlayer && (a.__dirty || e) && n.push(a)
			}
			for (var o = !0, s = 0; s < n.length; s++) {
				var a = n[s],
					l = a.ctx,
					u = {};
				l.save();
				var h = e ? a.__startIndex : a.__drawIndex,
					c = !e && a.incremental && Date.now,
					d = c && Date.now(),
					p = a.zlevel === this._zlevelList[0] ? this._backgroundColor : null;
				if (a.__startIndex === a.__endIndex) a.clear(!1, p);
				else if (h === a.__startIndex) {
					var g = t[h];
					g.incremental && g.notClear && !e || a.clear(!1, p)
				} - 1 === h && (console.error("For some unknown reason. drawIndex is -1"), h = a.__startIndex);
				for (var v = h; v < a.__endIndex; v++) {
					var m = t[v];
					if (this._doPaintEl(m, a, e, u), m.__dirty = m.__dirtyText = !1, c) {
						var y = Date.now() - d;
						if (y > 15) break
					}
				}
				a.__drawIndex = v, a.__drawIndex < a.__endIndex && (o = !1), u.prevElClipPaths && l.restore(), l.restore()
			}
			return hp.wxa && f(this._layers, function(t) {
				t && t.ctx && t.ctx.draw && t.ctx.draw()
			}), o
		},
		_doPaintEl: function(t, e, n, i) {
			var r = e.ctx,
				a = t.transform;
			if (!(!e.__dirty && !n || t.invisible || 0 === t.style.opacity || a && !a[0] && !a[3] || t.culling && ki(t, this._width,
					this._height))) {
				var o = t.__clipPaths,
					s = i.prevElClipPaths;
				(!s || Pi(o, s)) && (s && (r.restore(), i.prevElClipPaths = null, i.prevEl = null), o && (r.save(), Li(o, r), i.prevElClipPaths =
					o)), t.beforeBrush && t.beforeBrush(r), t.brush(r, i.prevEl || null), i.prevEl = t, t.afterBrush && t.afterBrush(
					r)
			}
		},
		getLayer: function(t, e) {
			this._singleCanvas && !this._needsManuallyCompositing && (t = nv);
			var n = this._layers[t];
			return n || (n = new Ng("zr_" + t, this, this.dpr), n.zlevel = t, n.__builtin__ = !0, this._layerConfig[t] ? r(n,
				this._layerConfig[t], !0) : this._layerConfig[t - iv] && r(n, this._layerConfig[t - iv], !0), e && (n.virtual =
				e), this.insertLayer(t, n), n.initContext()), n
		},
		insertLayer: function(t, e) {
			var n = this._layers,
				i = this._zlevelList,
				r = i.length,
				a = null,
				o = -1,
				s = this._domRoot;
			if (n[t]) return void yg("ZLevel " + t + " has been used already");
			if (!Di(e)) return void yg("Layer of zlevel " + t + " is not valid");
			if (r > 0 && t > i[0]) {
				for (o = 0; r - 1 > o && !(i[o] < t && i[o + 1] > t); o++);
				a = n[i[o]]
			}
			if (i.splice(o + 1, 0, t), n[t] = e, !e.virtual)
				if (a) {
					var l = a.dom;
					l.nextSibling ? s.insertBefore(e.dom, l.nextSibling) : s.appendChild(e.dom)
				} else s.firstChild ? s.insertBefore(e.dom, s.firstChild) : s.appendChild(e.dom)
		},
		eachLayer: function(t, e) {
			var n, i, r = this._zlevelList;
			for (i = 0; i < r.length; i++) n = r[i], t.call(e, this._layers[n], n)
		},
		eachBuiltinLayer: function(t, e) {
			var n, i, r, a = this._zlevelList;
			for (r = 0; r < a.length; r++) i = a[r], n = this._layers[i], n.__builtin__ && t.call(e, n, i)
		},
		eachOtherLayer: function(t, e) {
			var n, i, r, a = this._zlevelList;
			for (r = 0; r < a.length; r++) i = a[r], n = this._layers[i], n.__builtin__ || t.call(e, n, i)
		},
		getLayers: function() {
			return this._layers
		},
		_updateLayerStatus: function(t) {
			function e(t) {
				a && (a.__endIndex !== t && (a.__dirty = !0), a.__endIndex = t)
			}
			if (this.eachBuiltinLayer(function(t) {
					t.__dirty = t.__used = !1
				}), this._singleCanvas)
				for (var n = 1; n < t.length; n++) {
					var i = t[n];
					if (i.zlevel !== t[n - 1].zlevel || i.incremental) {
						this._needsManuallyCompositing = !0;
						break
					}
				}
			for (var r, a = null, o = 0, n = 0; n < t.length; n++) {
				var s, i = t[n],
					l = i.zlevel;
				r !== l && (r = l, o = 0), i.incremental ? (s = this.getLayer(l + rv, this._needsManuallyCompositing), s.incremental = !
					0, o = 1) : s = this.getLayer(l + (o > 0 ? iv : 0), this._needsManuallyCompositing), s.__builtin__ || yg(
					"ZLevel " + l + " has been used by unkown layer " + s.id), s !== a && (s.__used = !0, s.__startIndex !== n &&
					(s.__dirty = !0), s.__startIndex = n, s.__drawIndex = s.incremental ? -1 : n, e(n), a = s), i.__dirty && (s.__dirty = !
					0, s.incremental && s.__drawIndex < 0 && (s.__drawIndex = n))
			}
			e(n), this.eachBuiltinLayer(function(t) {
				!t.__used && t.getElementCount() > 0 && (t.__dirty = !0, t.__startIndex = t.__endIndex = t.__drawIndex = 0), t
					.__dirty && t.__drawIndex < 0 && (t.__drawIndex = t.__startIndex)
			})
		},
		clear: function() {
			return this.eachBuiltinLayer(this._clearLayer), this
		},
		_clearLayer: function(t) {
			t.clear()
		},
		setBackgroundColor: function(t) {
			this._backgroundColor = t
		},
		configLayer: function(t, e) {
			if (e) {
				var n = this._layerConfig;
				n[t] ? r(n[t], e, !0) : n[t] = e;
				for (var i = 0; i < this._zlevelList.length; i++) {
					var a = this._zlevelList[i];
					if (a === t || a === t + iv) {
						var o = this._layers[a];
						r(o, n[t], !0)
					}
				}
			}
		},
		delLayer: function(t) {
			var e = this._layers,
				n = this._zlevelList,
				i = e[t];
			i && (i.dom.parentNode.removeChild(i.dom), delete e[t], n.splice(u(n, t), 1))
		},
		resize: function(t, e) {
			if (this._domRoot.style) {
				var n = this._domRoot;
				n.style.display = "none";
				var i = this._opts;
				if (null != t && (i.width = t), null != e && (i.height = e), t = this._getSize(0), e = this._getSize(1), n.style
					.display = "", this._width !== t || e !== this._height) {
					n.style.width = t + "px", n.style.height = e + "px";
					for (var r in this._layers) this._layers.hasOwnProperty(r) && this._layers[r].resize(t, e);
					f(this._progressiveLayers, function(n) {
						n.resize(t, e)
					}), this.refresh(!0)
				}
				this._width = t, this._height = e
			} else {
				if (null == t || null == e) return;
				this._width = t, this._height = e, this.getLayer(nv).resize(t, e)
			}
			return this
		},
		clearLayer: function(t) {
			var e = this._layers[t];
			e && e.clear()
		},
		dispose: function() {
			this.root.innerHTML = "", this.root = this.storage = this._domRoot = this._layers = null
		},
		getRenderedCanvas: function(t) {
			if (t = t || {}, this._singleCanvas && !this._compositeManually) return this._layers[nv].dom;
			var e = new Ng("image", this, t.pixelRatio || this.dpr);
			if (e.initContext(), e.clear(!1, t.backgroundColor || this._backgroundColor), t.pixelRatio <= this.dpr) {
				this.refresh();
				var n = e.dom.width,
					i = e.dom.height,
					r = e.ctx;
				this.eachLayer(function(t) {
					t.__builtin__ ? r.drawImage(t.dom, 0, 0, n, i) : t.renderToCanvas && (e.ctx.save(), t.renderToCanvas(e.ctx),
						e.ctx.restore())
				})
			} else
				for (var a = {}, o = this.storage.getDisplayList(!0), s = 0; s < o.length; s++) {
					var l = o[s];
					this._doPaintEl(l, e, !0, a)
				}
			return e.dom
		},
		getWidth: function() {
			return this._width
		},
		getHeight: function() {
			return this._height
		},
		_getSize: function(t) {
			var e = this._opts,
				n = ["width", "height"][t],
				i = ["clientWidth", "clientHeight"][t],
				r = ["paddingLeft", "paddingTop"][t],
				a = ["paddingRight", "paddingBottom"][t];
			if (null != e[n] && "auto" !== e[n]) return parseFloat(e[n]);
			var o = this.root,
				s = document.defaultView.getComputedStyle(o);
			return (o[i] || Ai(s[n]) || Ai(o.style[n])) - (Ai(s[r]) || 0) - (Ai(s[a]) || 0) | 0
		},
		pathToImage: function(t, e) {
			e = e || this.dpr;
			var n = document.createElement("canvas"),
				i = n.getContext("2d"),
				r = t.getBoundingRect(),
				a = t.style,
				o = a.shadowBlur * e,
				s = a.shadowOffsetX * e,
				l = a.shadowOffsetY * e,
				u = a.hasStroke() ? a.lineWidth : 0,
				h = Math.max(u / 2, -s + o),
				c = Math.max(u / 2, s + o),
				d = Math.max(u / 2, -l + o),
				f = Math.max(u / 2, l + o),
				p = r.width + h + c,
				g = r.height + d + f;
			n.width = p * e, n.height = g * e, i.scale(e, e), i.clearRect(0, 0, p, g), i.dpr = e;
			var v = {
				position: t.position,
				rotation: t.rotation,
				scale: t.scale
			};
			t.position = [h - r.x, d - r.y], t.rotation = 0, t.scale = [1, 1], t.updateTransform(), t && t.brush(i);
			var m = Ci,
				y = new m({
					style: {
						x: 0,
						y: 0,
						image: n
					}
				});
			return null != v.position && (y.position = t.position = v.position), null != v.rotation && (y.rotation = t.rotation =
				v.rotation), null != v.scale && (y.scale = t.scale = v.scale), y
		}
	};
	var lv = function(t) {
		t = t || {}, this.stage = t.stage || {}, this.onframe = t.onframe || function() {}, this._clips = [], this._running = !
			1, this._time, this._pausedTime, this._pauseStart, this._paused = !1, Lp.call(this)
	};
	lv.prototype = {
		constructor: lv,
		addClip: function(t) {
			this._clips.push(t)
		},
		addAnimator: function(t) {
			t.animation = this;
			for (var e = t.getClips(), n = 0; n < e.length; n++) this.addClip(e[n])
		},
		removeClip: function(t) {
			var e = u(this._clips, t);
			e >= 0 && this._clips.splice(e, 1)
		},
		removeAnimator: function(t) {
			for (var e = t.getClips(), n = 0; n < e.length; n++) this.removeClip(e[n]);
			t.animation = null
		},
		_update: function() {
			for (var t = (new Date).getTime() - this._pausedTime, e = t - this._time, n = this._clips, i = n.length, r = [],
					a = [], o = 0; i > o; o++) {
				var s = n[o],
					l = s.step(t, e);
				l && (r.push(l), a.push(s))
			}
			for (var o = 0; i > o;) n[o]._needsRemove ? (n[o] = n[i - 1], n.pop(), i--) : o++;
			i = r.length;
			for (var o = 0; i > o; o++) a[o].fire(r[o]);
			this._time = t, this.onframe(e), this.trigger("frame", e), this.stage.update && this.stage.update()
		},
		_startLoop: function() {
			function t() {
				e._running && (Fg(t), !e._paused && e._update())
			}
			var e = this;
			this._running = !0, Fg(t)
		},
		start: function() {
			this._time = (new Date).getTime(), this._pausedTime = 0, this._startLoop()
		},
		stop: function() {
			this._running = !1
		},
		pause: function() {
			this._paused || (this._pauseStart = (new Date).getTime(), this._paused = !0)
		},
		resume: function() {
			this._paused && (this._pausedTime += (new Date).getTime() - this._pauseStart, this._paused = !1)
		},
		clear: function() {
			this._clips = []
		},
		isFinished: function() {
			return !this._clips.length
		},
		animate: function(t, e) {
			e = e || {};
			var n = new fg(t, e.loop, e.getter, e.setter);
			return this.addAnimator(n), n
		}
	}, c(lv, Lp);
	var uv = 300,
		hv = hp.domSupported,
		cv = function() {
			var t = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"],
				e = ["touchstart", "touchend", "touchmove"],
				n = {
					pointerdown: 1,
					pointerup: 1,
					pointermove: 1,
					pointerout: 1
				},
				i = p(t, function(t) {
					var e = t.replace("mouse", "pointer");
					return n.hasOwnProperty(e) ? e : t
				});
			return {
				mouse: t,
				touch: e,
				pointer: i
			}
		}(),
		dv = {
			mouse: ["mousemove", "mouseup"],
			pointer: ["pointermove", "pointerup"]
		},
		fv = Vi.prototype;
	fv.stopPropagation = fv.stopImmediatePropagation = fv.preventDefault = V;
	var pv = {
		mousedown: function(t) {
			t = be(this.dom, t), this._mayPointerCapture = [t.zrX, t.zrY], this.trigger("mousedown", t)
		},
		mousemove: function(t) {
			t = be(this.dom, t);
			var e = this._mayPointerCapture;
			!e || t.zrX === e[0] && t.zrY === e[1] || Ui(this, !0), this.trigger("mousemove", t)
		},
		mouseup: function(t) {
			t = be(this.dom, t), Ui(this, !1), this.trigger("mouseup", t)
		},
		mouseout: function(t) {
			t = be(this.dom, t), this._pointerCapturing && (t.zrEventControl = "no_globalout");
			var e = t.toElement || t.relatedTarget;
			t.zrIsToLocalDOM = Fi(this, e), this.trigger("mouseout", t)
		},
		touchstart: function(t) {
			t = be(this.dom, t), Ri(t), this._lastTouchMoment = new Date, this.handler.processGesture(t, "start"), pv.mousemove
				.call(this, t), pv.mousedown.call(this, t)
		},
		touchmove: function(t) {
			t = be(this.dom, t), Ri(t), this.handler.processGesture(t, "change"), pv.mousemove.call(this, t)
		},
		touchend: function(t) {
			t = be(this.dom, t), Ri(t), this.handler.processGesture(t, "end"), pv.mouseup.call(this, t), +new Date - this._lastTouchMoment <
				uv && pv.click.call(this, t)
		},
		pointerdown: function(t) {
			pv.mousedown.call(this, t)
		},
		pointermove: function(t) {
			Bi(t) || pv.mousemove.call(this, t)
		},
		pointerup: function(t) {
			pv.mouseup.call(this, t)
		},
		pointerout: function(t) {
			Bi(t) || pv.mouseout.call(this, t)
		}
	};
	f(["click", "mousewheel", "dblclick", "contextmenu"], function(t) {
		pv[t] = function(e) {
			e = be(this.dom, e), this.trigger(t, e)
		}
	});
	var gv = {
			pointermove: function(t) {
				Bi(t) || gv.mousemove.call(this, t)
			},
			pointerup: function(t) {
				gv.mouseup.call(this, t)
			},
			mousemove: function(t) {
				this.trigger("mousemove", t)
			},
			mouseup: function(t) {
				var e = this._pointerCapturing;
				Ui(this, !1), this.trigger("mouseup", t), e && (t.zrEventControl = "only_globalout", this.trigger("mouseout", t))
			}
		},
		vv = qi.prototype;
	vv.dispose = function() {
		Xi(this._localHandlerScope), hv && Xi(this._globalHandlerScope)
	}, vv.setCursor = function(t) {
		this.dom.style && (this.dom.style.cursor = t || "default")
	}, c(qi, Lp);
	var mv = !hp.canvasSupported,
		yv = {
			canvas: sv
		},
		xv = {},
		_v = "4.3.2",
		wv = function(t, e, n) {
			n = n || {}, this.dom = e, this.id = t;
			var i = this,
				r = new Cg,
				a = n.renderer;
			if (mv) {
				if (!yv.vml) throw new Error("You need to require 'zrender/vml/vml' to support IE8");
				a = "vml"
			} else a && yv[a] || (a = "canvas");
			var o = new yv[a](e, r, n, t);
			this.storage = r, this.painter = o;
			var s = hp.node || hp.worker ? null : new qi(o.getViewportRoot(), o.root);
			this.handler = new Xp(r, o, s, o.root), this.animation = new lv({
				stage: {
					update: y(this.flush, this)
				}
			}), this.animation.start(), this._needsRefresh;
			var l = r.delFromStorage,
				u = r.addToStorage;
			r.delFromStorage = function(t) {
				l.call(r, t), t && t.removeSelfFromZr(i)
			}, r.addToStorage = function(t) {
				u.call(r, t), t.addSelfToZr(i)
			}
		};
	wv.prototype = {
		constructor: wv,
		getId: function() {
			return this.id
		},
		add: function(t) {
			this.storage.addRoot(t), this._needsRefresh = !0
		},
		remove: function(t) {
			this.storage.delRoot(t), this._needsRefresh = !0
		},
		configLayer: function(t, e) {
			this.painter.configLayer && this.painter.configLayer(t, e), this._needsRefresh = !0
		},
		setBackgroundColor: function(t) {
			this.painter.setBackgroundColor && this.painter.setBackgroundColor(t), this._needsRefresh = !0
		},
		refreshImmediately: function() {
			this._needsRefresh = this._needsRefreshHover = !1, this.painter.refresh(), this._needsRefresh = this._needsRefreshHover = !
				1
		},
		refresh: function() {
			this._needsRefresh = !0
		},
		flush: function() {
			var t;
			this._needsRefresh && (t = !0, this.refreshImmediately()), this._needsRefreshHover && (t = !0, this.refreshHoverImmediately()),
				t && this.trigger("rendered")
		},
		addHover: function(t, e) {
			if (this.painter.addHover) {
				var n = this.painter.addHover(t, e);
				return this.refreshHover(), n
			}
		},
		removeHover: function(t) {
			this.painter.removeHover && (this.painter.removeHover(t), this.refreshHover())
		},
		clearHover: function() {
			this.painter.clearHover && (this.painter.clearHover(), this.refreshHover())
		},
		refreshHover: function() {
			this._needsRefreshHover = !0
		},
		refreshHoverImmediately: function() {
			this._needsRefreshHover = !1, this.painter.refreshHover && this.painter.refreshHover()
		},
		resize: function(t) {
			t = t || {}, this.painter.resize(t.width, t.height), this.handler.resize()
		},
		clearAnimation: function() {
			this.animation.clear()
		},
		getWidth: function() {
			return this.painter.getWidth()
		},
		getHeight: function() {
			return this.painter.getHeight()
		},
		pathToImage: function(t, e) {
			return this.painter.pathToImage(t, e)
		},
		setCursorStyle: function(t) {
			this.handler.setCursorStyle(t)
		},
		findHover: function(t, e) {
			return this.handler.findHover(t, e)
		},
		on: function(t, e, n) {
			this.handler.on(t, e, n)
		},
		off: function(t, e) {
			this.handler.off(t, e)
		},
		trigger: function(t, e) {
			this.handler.trigger(t, e)
		},
		clear: function() {
			this.storage.delRoot(), this.painter.clear()
		},
		dispose: function() {
			this.animation.stop(), this.clear(), this.storage.dispose(), this.painter.dispose(), this.handler.dispose(), this
				.animation = this.storage = this.painter = this.handler = null, Qi(this.id)
		}
	};
	var bv = (Object.freeze || Object)({
			version: _v,
			init: ji,
			dispose: Zi,
			getInstance: Ki,
			registerPainter: $i
		}),
		Sv = f,
		Mv = S,
		Iv = _,
		Tv = "series\x00",
		Cv = ["fontStyle", "fontWeight", "fontSize", "fontFamily", "rich", "tag", "color", "textBorderColor",
			"textBorderWidth", "width", "height", "lineHeight", "align", "verticalAlign", "baseline", "shadowColor",
			"shadowBlur", "shadowOffsetX", "shadowOffsetY", "textShadowColor", "textShadowBlur", "textShadowOffsetX",
			"textShadowOffsetY", "backgroundColor", "borderColor", "borderWidth", "borderRadius", "padding"
		],
		Av = 0,
		Dv = ".",
		kv = "___EC__COMPONENT__CONTAINER___",
		Pv = 0,
		Lv = function(t) {
			for (var e = 0; e < t.length; e++) t[e][1] || (t[e][1] = t[e][0]);
			return function(e, n, i) {
				for (var r = {}, a = 0; a < t.length; a++) {
					var o = t[a][1];
					if (!(n && u(n, o) >= 0 || i && u(i, o) < 0)) {
						var s = e.getShallow(o);
						null != s && (r[t[a][0]] = s)
					}
				}
				return r
			}
		},
		Ov = Lv([
			["lineWidth", "width"],
			["stroke", "color"],
			["opacity"],
			["shadowBlur"],
			["shadowOffsetX"],
			["shadowOffsetY"],
			["shadowColor"]
		]),
		Ev = {
			getLineStyle: function(t) {
				var e = Ov(this, t);
				return e.lineDash = this.getLineDash(e.lineWidth), e
			},
			getLineDash: function(t) {
				null == t && (t = 1);
				var e = this.get("type"),
					n = Math.max(t, 2),
					i = 4 * t;
				return "solid" === e || null == e ? !1 : "dashed" === e ? [i, i] : [n, n]
			}
		},
		Bv = Lv([
			["fill", "color"],
			["shadowBlur"],
			["shadowOffsetX"],
			["shadowOffsetY"],
			["opacity"],
			["shadowColor"]
		]),
		zv = {
			getAreaStyle: function(t, e) {
				return Bv(this, t, e)
			}
		},
		Rv = Math.pow,
		Nv = Math.sqrt,
		Fv = 1e-8,
		Vv = 1e-4,
		Hv = Nv(3),
		Gv = 1 / 3,
		Wv = H(),
		Xv = H(),
		Uv = H(),
		Yv = Math.min,
		qv = Math.max,
		jv = Math.sin,
		Zv = Math.cos,
		Kv = 2 * Math.PI,
		$v = H(),
		Qv = H(),
		Jv = H(),
		tm = [],
		em = [],
		nm = {
			M: 1,
			L: 2,
			C: 3,
			Q: 4,
			A: 5,
			Z: 6,
			R: 7
		},
		im = [],
		rm = [],
		am = [],
		om = [],
		sm = Math.min,
		lm = Math.max,
		um = Math.cos,
		hm = Math.sin,
		cm = Math.sqrt,
		dm = Math.abs,
		fm = "undefined" != typeof Float32Array,
		pm = function(t) {
			this._saveData = !t, this._saveData && (this.data = []), this._ctx = null
		};
	pm.prototype = {
		constructor: pm,
		_xi: 0,
		_yi: 0,
		_x0: 0,
		_y0: 0,
		_ux: 0,
		_uy: 0,
		_len: 0,
		_lineDash: null,
		_dashOffset: 0,
		_dashIdx: 0,
		_dashSum: 0,
		setScale: function(t, e, n) {
			n = n || 0, this._ux = dm(n / vg / t) || 0, this._uy = dm(n / vg / e) || 0
		},
		getContext: function() {
			return this._ctx
		},
		beginPath: function(t) {
			return this._ctx = t, t && t.beginPath(), t && (this.dpr = t.dpr), this._saveData && (this._len = 0), this._lineDash &&
				(this._lineDash = null, this._dashOffset = 0), this
		},
		moveTo: function(t, e) {
			return this.addData(nm.M, t, e), this._ctx && this._ctx.moveTo(t, e), this._x0 = t, this._y0 = e, this._xi = t,
				this._yi = e, this
		},
		lineTo: function(t, e) {
			var n = dm(t - this._xi) > this._ux || dm(e - this._yi) > this._uy || this._len < 5;
			return this.addData(nm.L, t, e), this._ctx && n && (this._needsDash() ? this._dashedLineTo(t, e) : this._ctx.lineTo(
				t, e)), n && (this._xi = t, this._yi = e), this
		},
		bezierCurveTo: function(t, e, n, i, r, a) {
			return this.addData(nm.C, t, e, n, i, r, a), this._ctx && (this._needsDash() ? this._dashedBezierTo(t, e, n, i, r,
				a) : this._ctx.bezierCurveTo(t, e, n, i, r, a)), this._xi = r, this._yi = a, this
		},
		quadraticCurveTo: function(t, e, n, i) {
			return this.addData(nm.Q, t, e, n, i), this._ctx && (this._needsDash() ? this._dashedQuadraticTo(t, e, n, i) :
				this._ctx.quadraticCurveTo(t, e, n, i)), this._xi = n, this._yi = i, this
		},
		arc: function(t, e, n, i, r, a) {
			return this.addData(nm.A, t, e, n, n, i, r - i, 0, a ? 0 : 1), this._ctx && this._ctx.arc(t, e, n, i, r, a), this
				._xi = um(r) * n + t, this._yi = hm(r) * n + e, this
		},
		arcTo: function(t, e, n, i, r) {
			return this._ctx && this._ctx.arcTo(t, e, n, i, r), this
		},
		rect: function(t, e, n, i) {
			return this._ctx && this._ctx.rect(t, e, n, i), this.addData(nm.R, t, e, n, i), this
		},
		closePath: function() {
			this.addData(nm.Z);
			var t = this._ctx,
				e = this._x0,
				n = this._y0;
			return t && (this._needsDash() && this._dashedLineTo(e, n), t.closePath()), this._xi = e, this._yi = n, this
		},
		fill: function(t) {
			t && t.fill(), this.toStatic()
		},
		stroke: function(t) {
			t && t.stroke(), this.toStatic()
		},
		setLineDash: function(t) {
			if (t instanceof Array) {
				this._lineDash = t, this._dashIdx = 0;
				for (var e = 0, n = 0; n < t.length; n++) e += t[n];
				this._dashSum = e
			}
			return this
		},
		setLineDashOffset: function(t) {
			return this._dashOffset = t, this
		},
		len: function() {
			return this._len
		},
		setData: function(t) {
			var e = t.length;
			this.data && this.data.length === e || !fm || (this.data = new Float32Array(e));
			for (var n = 0; e > n; n++) this.data[n] = t[n];
			this._len = e
		},
		appendPath: function(t) {
			t instanceof Array || (t = [t]);
			for (var e = t.length, n = 0, i = this._len, r = 0; e > r; r++) n += t[r].len();
			fm && this.data instanceof Float32Array && (this.data = new Float32Array(i + n));
			for (var r = 0; e > r; r++)
				for (var a = t[r].data, o = 0; o < a.length; o++) this.data[i++] = a[o];
			this._len = i
		},
		addData: function(t) {
			if (this._saveData) {
				var e = this.data;
				this._len + arguments.length > e.length && (this._expandData(), e = this.data);
				for (var n = 0; n < arguments.length; n++) e[this._len++] = arguments[n];
				this._prevCmd = t
			}
		},
		_expandData: function() {
			if (!(this.data instanceof Array)) {
				for (var t = [], e = 0; e < this._len; e++) t[e] = this.data[e];
				this.data = t
			}
		},
		_needsDash: function() {
			return this._lineDash
		},
		_dashedLineTo: function(t, e) {
			var n, i, r = this._dashSum,
				a = this._dashOffset,
				o = this._lineDash,
				s = this._ctx,
				l = this._xi,
				u = this._yi,
				h = t - l,
				c = e - u,
				d = cm(h * h + c * c),
				f = l,
				p = u,
				g = o.length;
			for (h /= d, c /= d, 0 > a && (a = r + a), a %= r, f -= a * h, p -= a * c; h > 0 && t >= f || 0 > h && f >= t ||
				0 === h && (c > 0 && e >= p || 0 > c && p >= e);) i = this._dashIdx, n = o[i], f += h * n, p += c * n, this._dashIdx =
				(i + 1) % g, h > 0 && l > f || 0 > h && f > l || c > 0 && u > p || 0 > c && p > u || s[i % 2 ? "moveTo" :
					"lineTo"](h >= 0 ? sm(f, t) : lm(f, t), c >= 0 ? sm(p, e) : lm(p, e));
			h = f - t, c = p - e, this._dashOffset = -cm(h * h + c * c)
		},
		_dashedBezierTo: function(t, e, n, i, r, a) {
			var o, s, l, u, h, c = this._dashSum,
				d = this._dashOffset,
				f = this._lineDash,
				p = this._ctx,
				g = this._xi,
				v = this._yi,
				m = Sr,
				y = 0,
				x = this._dashIdx,
				_ = f.length,
				w = 0;
			for (0 > d && (d = c + d), d %= c, o = 0; 1 > o; o += .1) s = m(g, t, n, r, o + .1) - m(g, t, n, r, o), l = m(v,
				e, i, a, o + .1) - m(v, e, i, a, o), y += cm(s * s + l * l);
			for (; _ > x && (w += f[x], !(w > d)); x++);
			for (o = (w - d) / y; 1 >= o;) u = m(g, t, n, r, o), h = m(v, e, i, a, o), x % 2 ? p.moveTo(u, h) : p.lineTo(u, h),
				o += f[x] / y, x = (x + 1) % _;
			x % 2 !== 0 && p.lineTo(r, a), s = r - u, l = a - h, this._dashOffset = -cm(s * s + l * l)
		},
		_dashedQuadraticTo: function(t, e, n, i) {
			var r = n,
				a = i;
			n = (n + 2 * t) / 3, i = (i + 2 * e) / 3, t = (this._xi + 2 * t) / 3, e = (this._yi + 2 * e) / 3, this._dashedBezierTo(
				t, e, n, i, r, a)
		},
		toStatic: function() {
			var t = this.data;
			t instanceof Array && (t.length = this._len, fm && (this.data = new Float32Array(t)))
		},
		getBoundingRect: function() {
			im[0] = im[1] = am[0] = am[1] = Number.MAX_VALUE, rm[0] = rm[1] = om[0] = om[1] = -Number.MAX_VALUE;
			for (var t = this.data, e = 0, n = 0, i = 0, r = 0, a = 0; a < t.length;) {
				var o = t[a++];
				switch (1 === a && (e = t[a], n = t[a + 1], i = e, r = n), o) {
					case nm.M:
						i = t[a++], r = t[a++], e = i, n = r, am[0] = i, am[1] = r, om[0] = i, om[1] = r;
						break;
					case nm.L:
						zr(e, n, t[a], t[a + 1], am, om), e = t[a++], n = t[a++];
						break;
					case nm.C:
						Rr(e, n, t[a++], t[a++], t[a++], t[a++], t[a], t[a + 1], am, om), e = t[a++], n = t[a++];
						break;
					case nm.Q:
						Nr(e, n, t[a++], t[a++], t[a], t[a + 1], am, om), e = t[a++], n = t[a++];
						break;
					case nm.A:
						var s = t[a++],
							l = t[a++],
							u = t[a++],
							h = t[a++],
							c = t[a++],
							d = t[a++] + c;
						a += 1;
						var f = 1 - t[a++];
						1 === a && (i = um(c) * u + s, r = hm(c) * h + l), Fr(s, l, u, h, c, d, f, am, om), e = um(d) * u + s, n = hm(
							d) * h + l;
						break;
					case nm.R:
						i = e = t[a++], r = n = t[a++];
						var p = t[a++],
							g = t[a++];
						zr(i, r, i + p, r + g, am, om);
						break;
					case nm.Z:
						e = i, n = r
				}
				oe(im, im, am), se(rm, rm, om)
			}
			return 0 === a && (im[0] = im[1] = rm[0] = rm[1] = 0), new Tn(im[0], im[1], rm[0] - im[0], rm[1] - im[1])
		},
		rebuildPath: function(t) {
			for (var e, n, i, r, a, o, s = this.data, l = this._ux, u = this._uy, h = this._len, c = 0; h > c;) {
				var d = s[c++];
				switch (1 === c && (i = s[c], r = s[c + 1], e = i, n = r), d) {
					case nm.M:
						e = i = s[c++], n = r = s[c++], t.moveTo(i, r);
						break;
					case nm.L:
						a = s[c++], o = s[c++], (dm(a - i) > l || dm(o - r) > u || c === h - 1) && (t.lineTo(a, o), i = a, r = o);
						break;
					case nm.C:
						t.bezierCurveTo(s[c++], s[c++], s[c++], s[c++], s[c++], s[c++]), i = s[c - 2], r = s[c - 1];
						break;
					case nm.Q:
						t.quadraticCurveTo(s[c++], s[c++], s[c++], s[c++]), i = s[c - 2], r = s[c - 1];
						break;
					case nm.A:
						var f = s[c++],
							p = s[c++],
							g = s[c++],
							v = s[c++],
							m = s[c++],
							y = s[c++],
							x = s[c++],
							_ = s[c++],
							w = g > v ? g : v,
							b = g > v ? 1 : g / v,
							S = g > v ? v / g : 1,
							M = Math.abs(g - v) > .001,
							I = m + y;
						M ? (t.translate(f, p), t.rotate(x), t.scale(b, S), t.arc(0, 0, w, m, I, 1 - _), t.scale(1 / b, 1 / S), t.rotate(
								-x), t.translate(-f, -p)) : t.arc(f, p, w, m, I, 1 - _), 1 === c && (e = um(m) * g + f, n = hm(m) * v + p),
							i = um(I) * g + f, r = hm(I) * v + p;
						break;
					case nm.R:
						e = i = s[c], n = r = s[c + 1], t.rect(s[c++], s[c++], s[c++], s[c++]);
						break;
					case nm.Z:
						t.closePath(), i = e, r = n
				}
			}
		}
	}, pm.CMD = nm;
	var gm = 2 * Math.PI,
		vm = 2 * Math.PI,
		mm = pm.CMD,
		ym = 2 * Math.PI,
		xm = 1e-4,
		_m = [-1, -1, -1],
		wm = [-1, -1],
		bm = Rg.prototype.getCanvasPattern,
		Sm = Math.abs,
		Mm = new pm(!0);
	ta.prototype = {
		constructor: ta,
		type: "path",
		__dirtyPath: !0,
		strokeContainThreshold: 5,
		segmentIgnoreThreshold: 0,
		subPixelOptimize: !1,
		brush: function(t, e) {
			var n = this.style,
				i = this.path || Mm,
				r = n.hasStroke(),
				a = n.hasFill(),
				o = n.fill,
				s = n.stroke,
				l = a && !!o.colorStops,
				u = r && !!s.colorStops,
				h = a && !!o.image,
				c = r && !!s.image;
			if (n.bind(t, this, e), this.setTransform(t), this.__dirty) {
				var d;
				l && (d = d || this.getBoundingRect(), this._fillGradient = n.getGradient(t, o, d)), u && (d = d || this.getBoundingRect(),
					this._strokeGradient = n.getGradient(t, s, d))
			}
			l ? t.fillStyle = this._fillGradient : h && (t.fillStyle = bm.call(o, t)), u ? t.strokeStyle = this._strokeGradient :
				c && (t.strokeStyle = bm.call(s, t));
			var f = n.lineDash,
				p = n.lineDashOffset,
				g = !!t.setLineDash,
				v = this.getGlobalScale();
			if (i.setScale(v[0], v[1], this.segmentIgnoreThreshold), this.__dirtyPath || f && !g && r ? (i.beginPath(t), f &&
					!g && (i.setLineDash(f), i.setLineDashOffset(p)), this.buildPath(i, this.shape, !1), this.path && (this.__dirtyPath = !
						1)) : (t.beginPath(), this.path.rebuildPath(t)), a)
				if (null != n.fillOpacity) {
					var m = t.globalAlpha;
					t.globalAlpha = n.fillOpacity * n.opacity, i.fill(t), t.globalAlpha = m
				} else i.fill(t);
			if (f && g && (t.setLineDash(f), t.lineDashOffset = p), r)
				if (null != n.strokeOpacity) {
					var m = t.globalAlpha;
					t.globalAlpha = n.strokeOpacity * n.opacity, i.stroke(t), t.globalAlpha = m
				} else i.stroke(t);
			f && g && t.setLineDash([]), null != n.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect()))
		},
		buildPath: function() {},
		createPathProxy: function() {
			this.path = new pm
		},
		getBoundingRect: function() {
			var t = this._rect,
				e = this.style,
				n = !t;
			if (n) {
				var i = this.path;
				i || (i = this.path = new pm), this.__dirtyPath && (i.beginPath(), this.buildPath(i, this.shape, !1)), t = i.getBoundingRect()
			}
			if (this._rect = t, e.hasStroke()) {
				var r = this._rectWithStroke || (this._rectWithStroke = t.clone());
				if (this.__dirty || n) {
					r.copy(t);
					var a = e.lineWidth,
						o = e.strokeNoScale ? this.getLineScale() : 1;
					e.hasFill() || (a = Math.max(a, this.strokeContainThreshold || 4)), o > 1e-10 && (r.width += a / o, r.height +=
						a / o, r.x -= a / o / 2, r.y -= a / o / 2)
				}
				return r
			}
			return t
		},
		contain: function(t, e) {
			var n = this.transformCoordToLocal(t, e),
				i = this.getBoundingRect(),
				r = this.style;
			if (t = n[0], e = n[1], i.contain(t, e)) {
				var a = this.path.data;
				if (r.hasStroke()) {
					var o = r.lineWidth,
						s = r.strokeNoScale ? this.getLineScale() : 1;
					if (s > 1e-10 && (r.hasFill() || (o = Math.max(o, this.strokeContainThreshold)), Jr(a, o / s, t, e))) return !0
				}
				if (r.hasFill()) return Qr(a, t, e)
			}
			return !1
		},
		dirty: function(t) {
			null == t && (t = !0), t && (this.__dirtyPath = t, this._rect = null), this.__dirty = this.__dirtyText = !0, this
				.__zr && this.__zr.refresh(), this.__clipTarget && this.__clipTarget.dirty()
		},
		animateShape: function(t) {
			return this.animate("shape", t)
		},
		attrKV: function(t, e) {
			"shape" === t ? (this.setShape(e), this.__dirtyPath = !0, this._rect = null) : Ti.prototype.attrKV.call(this, t,
				e)
		},
		setShape: function(t, e) {
			var n = this.shape;
			if (n) {
				if (S(t))
					for (var i in t) t.hasOwnProperty(i) && (n[i] = t[i]);
				else n[t] = e;
				this.dirty(!0)
			}
			return this
		},
		getLineScale: function() {
			var t = this.transform;
			return t && Sm(t[0] - 1) > 1e-10 && Sm(t[3] - 1) > 1e-10 ? Math.sqrt(Sm(t[0] * t[3] - t[2] * t[1])) : 1
		}
	}, ta.extend = function(t) {
		var e = function(e) {
			ta.call(this, e), t.style && this.style.extendFrom(t.style, !1);
			var n = t.shape;
			if (n) {
				this.shape = this.shape || {};
				var i = this.shape;
				for (var r in n) !i.hasOwnProperty(r) && n.hasOwnProperty(r) && (i[r] = n[r])
			}
			t.init && t.init.call(this, e)
		};
		h(e, ta);
		for (var n in t) "style" !== n && "shape" !== n && (e.prototype[n] = t[n]);
		return e
	}, h(ta, Ti);
	var Im = pm.CMD,
		Tm = [
			[],
			[],
			[]
		],
		Cm = Math.sqrt,
		Am = Math.atan2,
		Dm = function(t, e) {
			var n, i, r, a, o, s, l = t.data,
				u = Im.M,
				h = Im.C,
				c = Im.L,
				d = Im.R,
				f = Im.A,
				p = Im.Q;
			for (r = 0, a = 0; r < l.length;) {
				switch (n = l[r++], a = r, i = 0, n) {
					case u:
						i = 1;
						break;
					case c:
						i = 1;
						break;
					case h:
						i = 3;
						break;
					case p:
						i = 2;
						break;
					case f:
						var g = e[4],
							v = e[5],
							m = Cm(e[0] * e[0] + e[1] * e[1]),
							y = Cm(e[2] * e[2] + e[3] * e[3]),
							x = Am(-e[1] / y, e[0] / m);
						l[r] *= m, l[r++] += g, l[r] *= y, l[r++] += v, l[r++] *= m, l[r++] *= y, l[r++] += x, l[r++] += x, r += 2, a =
							r;
						break;
					case d:
						s[0] = l[r++], s[1] = l[r++], ae(s, s, e), l[a++] = s[0], l[a++] = s[1], s[0] += l[r++], s[1] += l[r++], ae(s, s,
							e), l[a++] = s[0], l[a++] = s[1]
				}
				for (o = 0; i > o; o++) {
					var s = Tm[o];
					s[0] = l[r++], s[1] = l[r++], ae(s, s, e), l[a++] = s[0], l[a++] = s[1]
				}
			}
		},
		km = Math.sqrt,
		Pm = Math.sin,
		Lm = Math.cos,
		Om = Math.PI,
		Em = function(t) {
			return Math.sqrt(t[0] * t[0] + t[1] * t[1])
		},
		Bm = function(t, e) {
			return (t[0] * e[0] + t[1] * e[1]) / (Em(t) * Em(e))
		},
		zm = function(t, e) {
			return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(Bm(t, e))
		},
		Rm = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,
		Nm = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g,
		Fm = function(t) {
			Ti.call(this, t)
		};
	Fm.prototype = {
		constructor: Fm,
		type: "text",
		brush: function(t, e) {
			var n = this.style;
			this.__dirty && li(n, !0), n.fill = n.stroke = n.shadowBlur = n.shadowColor = n.shadowOffsetX = n.shadowOffsetY =
				null;
			var i = n.text;
			return null != i && (i += ""), Ii(i, n) ? (this.setTransform(t), hi(this, t, i, n, null, e), void this.restoreTransform(
				t)) : void(t.__attrCachedBy = kg.NONE)
		},
		getBoundingRect: function() {
			var t = this.style;
			if (this.__dirty && li(t, !0), !this._rect) {
				var e = t.text;
				null != e ? e += "" : e = "";
				var n = Un(t.text + "", t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.textLineHeight, t.rich);
				if (n.x += t.x || 0, n.y += t.y || 0, wi(t.textStroke, t.textStrokeWidth)) {
					var i = t.textStrokeWidth;
					n.x -= i / 2, n.y -= i / 2, n.width += i, n.height += i
				}
				this._rect = n
			}
			return this._rect
		}
	}, h(Fm, Ti);
	var Vm = ta.extend({
			type: "circle",
			shape: {
				cx: 0,
				cy: 0,
				r: 0
			},
			buildPath: function(t, e, n) {
				n && t.moveTo(e.cx + e.r, e.cy), t.arc(e.cx, e.cy, e.r, 0, 2 * Math.PI, !0)
			}
		}),
		Hm = [
			["shadowBlur", 0],
			["shadowColor", "#000"],
			["shadowOffsetX", 0],
			["shadowOffsetY", 0]
		],
		Gm = function(t) {
			return hp.browser.ie && hp.browser.version >= 11 ? function() {
				var e, n = this.__clipPaths,
					i = this.style;
				if (n)
					for (var r = 0; r < n.length; r++) {
						var a = n[r],
							o = a && a.shape,
							s = a && a.type;
						if (o && ("sector" === s && o.startAngle === o.endAngle || "rect" === s && (!o.width || !o.height))) {
							for (var l = 0; l < Hm.length; l++) Hm[l][2] = i[Hm[l][0]], i[Hm[l][0]] = Hm[l][1];
							e = !0;
							break
						}
					}
				if (t.apply(this, arguments), e)
					for (var l = 0; l < Hm.length; l++) i[Hm[l][0]] = Hm[l][2]
			} : t
		},
		Wm = ta.extend({
			type: "sector",
			shape: {
				cx: 0,
				cy: 0,
				r0: 0,
				r: 0,
				startAngle: 0,
				endAngle: 2 * Math.PI,
				clockwise: !0
			},
			brush: Gm(ta.prototype.brush),
			buildPath: function(t, e) {
				var n = e.cx,
					i = e.cy,
					r = Math.max(e.r0 || 0, 0),
					a = Math.max(e.r, 0),
					o = e.startAngle,
					s = e.endAngle,
					l = e.clockwise,
					u = Math.cos(o),
					h = Math.sin(o);
				t.moveTo(u * r + n, h * r + i), t.lineTo(u * a + n, h * a + i), t.arc(n, i, a, o, s, !l), t.lineTo(Math.cos(s) *
					r + n, Math.sin(s) * r + i), 0 !== r && t.arc(n, i, r, s, o, l), t.closePath()
			}
		}),
		Xm = ta.extend({
			type: "ring",
			shape: {
				cx: 0,
				cy: 0,
				r: 0,
				r0: 0
			},
			buildPath: function(t, e) {
				var n = e.cx,
					i = e.cy,
					r = 2 * Math.PI;
				t.moveTo(n + e.r, i), t.arc(n, i, e.r, 0, r, !1), t.moveTo(n + e.r0, i), t.arc(n, i, e.r0, 0, r, !0)
			}
		}),
		Um = function(t, e) {
			for (var n = t.length, i = [], r = 0, a = 1; n > a; a++) r += ee(t[a - 1], t[a]);
			var o = r / 2;
			o = n > o ? n : o;
			for (var a = 0; o > a; a++) {
				var s, l, u, h = a / (o - 1) * (e ? n : n - 1),
					c = Math.floor(h),
					d = h - c,
					f = t[c % n];
				e ? (s = t[(c - 1 + n) % n], l = t[(c + 1) % n], u = t[(c + 2) % n]) : (s = t[0 === c ? c : c - 1], l = t[c > n -
					2 ? n - 1 : c + 1], u = t[c > n - 3 ? n - 1 : c + 2]);
				var p = d * d,
					g = d * p;
				i.push([sa(s[0], f[0], l[0], u[0], d, p, g), sa(s[1], f[1], l[1], u[1], d, p, g)])
			}
			return i
		},
		Ym = function(t, e, n, i) {
			var r, a, o, s, l = [],
				u = [],
				h = [],
				c = [];
			if (i) {
				o = [1 / 0, 1 / 0], s = [-1 / 0, -1 / 0];
				for (var d = 0, f = t.length; f > d; d++) oe(o, o, t[d]), se(s, s, t[d]);
				oe(o, o, i[0]), se(s, s, i[1])
			}
			for (var d = 0, f = t.length; f > d; d++) {
				var p = t[d];
				if (n) r = t[d ? d - 1 : f - 1], a = t[(d + 1) % f];
				else {
					if (0 === d || d === f - 1) {
						l.push(W(t[d]));
						continue
					}
					r = t[d - 1], a = t[d + 1]
				}
				q(u, a, r), J(u, u, e);
				var g = ee(p, r),
					v = ee(p, a),
					m = g + v;
				0 !== m && (g /= m, v /= m), J(h, u, -g), J(c, u, v);
				var y = U([], p, h),
					x = U([], p, c);
				i && (se(y, y, o), oe(y, y, s), se(x, x, o), oe(x, x, s)), l.push(y), l.push(x)
			}
			return n && l.push(l.shift()), l
		},
		qm = ta.extend({
			type: "polygon",
			shape: {
				points: null,
				smooth: !1,
				smoothConstraint: null
			},
			buildPath: function(t, e) {
				la(t, e, !0)
			}
		}),
		jm = ta.extend({
			type: "polyline",
			shape: {
				points: null,
				smooth: !1,
				smoothConstraint: null
			},
			style: {
				stroke: "#000",
				fill: null
			},
			buildPath: function(t, e) {
				la(t, e, !1)
			}
		}),
		Zm = Math.round,
		Km = {},
		$m = ta.extend({
			type: "rect",
			shape: {
				r: 0,
				x: 0,
				y: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var n, i, r, a;
				this.subPixelOptimize ? (ha(Km, e, this.style), n = Km.x, i = Km.y, r = Km.width, a = Km.height, Km.r = e.r, e =
					Km) : (n = e.x, i = e.y, r = e.width, a = e.height), e.r ? si(t, e) : t.rect(n, i, r, a), t.closePath()
			}
		}),
		Qm = {},
		Jm = ta.extend({
			type: "line",
			shape: {
				x1: 0,
				y1: 0,
				x2: 0,
				y2: 0,
				percent: 1
			},
			style: {
				stroke: "#000",
				fill: null
			},
			buildPath: function(t, e) {
				var n, i, r, a;
				this.subPixelOptimize ? (ua(Qm, e, this.style), n = Qm.x1, i = Qm.y1, r = Qm.x2, a = Qm.y2) : (n = e.x1, i = e.y1,
					r = e.x2, a = e.y2);
				var o = e.percent;
				0 !== o && (t.moveTo(n, i), 1 > o && (r = n * (1 - o) + r * o, a = i * (1 - o) + a * o), t.lineTo(r, a))
			},
			pointAt: function(t) {
				var e = this.shape;
				return [e.x1 * (1 - t) + e.x2 * t, e.y1 * (1 - t) + e.y2 * t]
			}
		}),
		ty = [],
		ey = ta.extend({
			type: "bezier-curve",
			shape: {
				x1: 0,
				y1: 0,
				x2: 0,
				y2: 0,
				cpx1: 0,
				cpy1: 0,
				percent: 1
			},
			style: {
				stroke: "#000",
				fill: null
			},
			buildPath: function(t, e) {
				var n = e.x1,
					i = e.y1,
					r = e.x2,
					a = e.y2,
					o = e.cpx1,
					s = e.cpy1,
					l = e.cpx2,
					u = e.cpy2,
					h = e.percent;
				0 !== h && (t.moveTo(n, i), null == l || null == u ? (1 > h && (Or(n, o, r, h, ty), o = ty[1], r = ty[2], Or(i,
					s, a, h, ty), s = ty[1], a = ty[2]), t.quadraticCurveTo(o, s, r, a)) : (1 > h && (Cr(n, o, l, r, h, ty), o =
					ty[1], l = ty[2], r = ty[3], Cr(i, s, u, a, h, ty), s = ty[1], u = ty[2], a = ty[3]), t.bezierCurveTo(o, s,
					l, u, r, a)))
			},
			pointAt: function(t) {
				return da(this.shape, t, !1)
			},
			tangentAt: function(t) {
				var e = da(this.shape, t, !0);
				return te(e, e)
			}
		}),
		ny = ta.extend({
			type: "arc",
			shape: {
				cx: 0,
				cy: 0,
				r: 0,
				startAngle: 0,
				endAngle: 2 * Math.PI,
				clockwise: !0
			},
			style: {
				stroke: "#000",
				fill: null
			},
			buildPath: function(t, e) {
				var n = e.cx,
					i = e.cy,
					r = Math.max(e.r, 0),
					a = e.startAngle,
					o = e.endAngle,
					s = e.clockwise,
					l = Math.cos(a),
					u = Math.sin(a);
				t.moveTo(l * r + n, u * r + i), t.arc(n, i, r, a, o, !s)
			}
		}),
		iy = ta.extend({
			type: "compound",
			shape: {
				paths: null
			},
			_updatePathDirty: function() {
				for (var t = this.__dirtyPath, e = this.shape.paths, n = 0; n < e.length; n++) t = t || e[n].__dirtyPath;
				this.__dirtyPath = t, this.__dirty = this.__dirty || t
			},
			beforeBrush: function() {
				this._updatePathDirty();
				for (var t = this.shape.paths || [], e = this.getGlobalScale(), n = 0; n < t.length; n++) t[n].path || t[n].createPathProxy(),
					t[n].path.setScale(e[0], e[1], t[n].segmentIgnoreThreshold)
			},
			buildPath: function(t, e) {
				for (var n = e.paths || [], i = 0; i < n.length; i++) n[i].buildPath(t, n[i].shape, !0)
			},
			afterBrush: function() {
				for (var t = this.shape.paths || [], e = 0; e < t.length; e++) t[e].__dirtyPath = !1
			},
			getBoundingRect: function() {
				return this._updatePathDirty(), ta.prototype.getBoundingRect.call(this)
			}
		}),
		ry = function(t) {
			this.colorStops = t || []
		};
	ry.prototype = {
		constructor: ry,
		addColorStop: function(t, e) {
			this.colorStops.push({
				offset: t,
				color: e
			})
		}
	};
	var ay = function(t, e, n, i, r, a) {
		this.x = null == t ? 0 : t, this.y = null == e ? 0 : e, this.x2 = null == n ? 1 : n, this.y2 = null == i ? 0 : i,
			this.type = "linear", this.global = a || !1, ry.call(this, r)
	};
	ay.prototype = {
		constructor: ay
	}, h(ay, ry);
	var oy = function(t, e, n, i, r) {
		this.x = null == t ? .5 : t, this.y = null == e ? .5 : e, this.r = null == n ? .5 : n, this.type = "radial", this.global =
			r || !1, ry.call(this, i)
	};
	oy.prototype = {
		constructor: oy
	}, h(oy, ry), fa.prototype.incremental = !0, fa.prototype.clearDisplaybles = function() {
		this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, this.dirty(), this.notClear = !1
	}, fa.prototype.addDisplayable = function(t, e) {
		e ? this._temporaryDisplayables.push(t) : this._displayables.push(t), this.dirty()
	}, fa.prototype.addDisplayables = function(t, e) {
		e = e || !1;
		for (var n = 0; n < t.length; n++) this.addDisplayable(t[n], e)
	}, fa.prototype.eachPendingDisplayable = function(t) {
		for (var e = this._cursor; e < this._displayables.length; e++) t && t(this._displayables[e]);
		for (var e = 0; e < this._temporaryDisplayables.length; e++) t && t(this._temporaryDisplayables[e])
	}, fa.prototype.update = function() {
		this.updateTransform();
		for (var t = this._cursor; t < this._displayables.length; t++) {
			var e = this._displayables[t];
			e.parent = this, e.update(), e.parent = null
		}
		for (var t = 0; t < this._temporaryDisplayables.length; t++) {
			var e = this._temporaryDisplayables[t];
			e.parent = this, e.update(), e.parent = null
		}
	}, fa.prototype.brush = function(t) {
		for (var e = this._cursor; e < this._displayables.length; e++) {
			var n = this._displayables[e];
			n.beforeBrush && n.beforeBrush(t), n.brush(t, e === this._cursor ? null : this._displayables[e - 1]), n.afterBrush &&
				n.afterBrush(t)
		}
		this._cursor = e;
		for (var e = 0; e < this._temporaryDisplayables.length; e++) {
			var n = this._temporaryDisplayables[e];
			n.beforeBrush && n.beforeBrush(t), n.brush(t, 0 === e ? null : this._temporaryDisplayables[e - 1]), n.afterBrush &&
				n.afterBrush(t)
		}
		this._temporaryDisplayables = [], this.notClear = !0
	};
	var sy = [];
	fa.prototype.getBoundingRect = function() {
		if (!this._rect) {
			for (var t = new Tn(1 / 0, 1 / 0, -1 / 0, -1 / 0), e = 0; e < this._displayables.length; e++) {
				var n = this._displayables[e],
					i = n.getBoundingRect().clone();
				n.needLocalTransform() && i.applyTransform(n.getLocalTransform(sy)), t.union(i)
			}
			this._rect = t
		}
		return this._rect
	}, fa.prototype.contain = function(t, e) {
		var n = this.transformCoordToLocal(t, e),
			i = this.getBoundingRect();
		if (i.contain(n[0], n[1]))
			for (var r = 0; r < this._displayables.length; r++) {
				var a = this._displayables[r];
				if (a.contain(t, e)) return !0
			}
		return !1
	}, h(fa, Ti);
	var ly = Math.max,
		uy = Math.min,
		hy = {},
		cy = 1,
		dy = {
			color: "textFill",
			textBorderColor: "textStroke",
			textBorderWidth: "textStrokeWidth"
		},
		fy = "emphasis",
		py = "normal",
		gy = 1,
		vy = {},
		my = {},
		yy = oa,
		xy = ca,
		_y = N(),
		wy = 0;
	va("circle", Vm), va("sector", Wm), va("ring", Xm), va("polygon", qm), va("polyline", jm), va("rect", $m), va("line",
		Jm), va("bezierCurve", ey), va("arc", ny);
	var by = (Object.freeze || Object)({
			Z2_EMPHASIS_LIFT: cy,
			CACHED_LABEL_STYLE_PROPERTIES: dy,
			extendShape: pa,
			extendPath: ga,
			registerShape: va,
			getShapeClass: ma,
			makePath: ya,
			makeImage: xa,
			mergePath: yy,
			resizePath: wa,
			subPixelOptimizeLine: ba,
			subPixelOptimizeRect: Sa,
			subPixelOptimize: xy,
			setElementHoverStyle: Pa,
			setHoverStyle: Ra,
			setAsHighDownDispatcher: Na,
			isHighDownDispatcher: Fa,
			getHighlightDigit: Va,
			setLabelStyle: Ha,
			modifyLabelStyle: Ga,
			setTextStyle: Wa,
			setText: Xa,
			getFont: $a,
			updateProps: Ja,
			initProps: to,
			getTransform: eo,
			applyTransform: no,
			transformDirection: io,
			groupTransition: ro,
			clipPointsByRect: ao,
			clipRectByRect: oo,
			createIcon: so,
			linePolygonIntersect: lo,
			lineLineIntersect: uo,
			Group: Mg,
			Image: Ci,
			Text: Fm,
			Circle: Vm,
			Sector: Wm,
			Ring: Xm,
			Polygon: qm,
			Polyline: jm,
			Rect: $m,
			Line: Jm,
			BezierCurve: ey,
			Arc: ny,
			IncrementalDisplayable: fa,
			CompoundPath: iy,
			LinearGradient: ay,
			RadialGradient: oy,
			BoundingRect: Tn
		}),
		Sy = ["textStyle", "color"],
		My = {
			getTextColor: function(t) {
				var e = this.ecModel;
				return this.getShallow("color") || (!t && e ? e.get(Sy) : null)
			},
			getFont: function() {
				return $a({
					fontStyle: this.getShallow("fontStyle"),
					fontWeight: this.getShallow("fontWeight"),
					fontSize: this.getShallow("fontSize"),
					fontFamily: this.getShallow("fontFamily")
				}, this.ecModel)
			},
			getTextRect: function(t) {
				return Un(t, this.getFont(), this.getShallow("align"), this.getShallow("verticalAlign") || this.getShallow(
					"baseline"), this.getShallow("padding"), this.getShallow("lineHeight"), this.getShallow("rich"), this.getShallow(
					"truncateText"))
			}
		},
		Iy = Lv([
			["fill", "color"],
			["stroke", "borderColor"],
			["lineWidth", "borderWidth"],
			["opacity"],
			["shadowBlur"],
			["shadowOffsetX"],
			["shadowOffsetY"],
			["shadowColor"],
			["textPosition"],
			["textAlign"]
		]),
		Ty = {
			getItemStyle: function(t, e) {
				var n = Iy(this, t, e),
					i = this.getBorderLineDash();
				return i && (n.lineDash = i), n
			},
			getBorderLineDash: function() {
				var t = this.get("borderType");
				return "solid" === t || null == t ? null : "dashed" === t ? [5, 5] : [1, 1]
			}
		},
		Cy = c,
		Ay = lr();
	fo.prototype = {
		constructor: fo,
		init: null,
		mergeOption: function(t) {
			r(this.option, t, !0)
		},
		get: function(t, e) {
			return null == t ? this.option : po(this.option, this.parsePath(t), !e && go(this, t))
		},
		getShallow: function(t, e) {
			var n = this.option,
				i = null == n ? n : n[t],
				r = !e && go(this, t);
			return null == i && r && (i = r.getShallow(t)), i
		},
		getModel: function(t, e) {
			var n, i = null == t ? this.option : po(this.option, t = this.parsePath(t));
			return e = e || (n = go(this, t)) && n.getModel(t), new fo(i, e, this.ecModel)
		},
		isEmpty: function() {
			return null == this.option
		},
		restoreData: function() {},
		clone: function() {
			var t = this.constructor;
			return new t(i(this.option))
		},
		setReadOnly: function() {},
		parsePath: function(t) {
			return "string" == typeof t && (t = t.split(".")), t
		},
		customizeGetParent: function(t) {
			Ay(this).getParent = t
		},
		isAnimationEnabled: function() {
			if (!hp.node) {
				if (null != this.option.animation) return !!this.option.animation;
				if (this.parentModel) return this.parentModel.isAnimationEnabled()
			}
		}
	}, vr(fo), mr(fo), Cy(fo, Ev), Cy(fo, zv), Cy(fo, My), Cy(fo, Ty);
	var Dy = 0,
		ky = 1e-4,
		Py = 9007199254740991,
		Ly =
		/^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/,
		Oy = (Object.freeze || Object)({
			linearMap: _o,
			parsePercent: wo,
			round: bo,
			asc: So,
			getPrecision: Mo,
			getPrecisionSafe: Io,
			getPixelPrecision: To,
			getPercentWithPrecision: Co,
			MAX_SAFE_INTEGER: Py,
			remRadian: Ao,
			isRadianAroundZero: Do,
			parseDate: ko,
			quantity: Po,
			quantityExponent: Lo,
			nice: Oo,
			quantile: Eo,
			reformIntervals: Bo,
			isNumeric: zo
		}),
		Ey = L,
		By = /([&<>"'])/g,
		zy = {
			"&": "&amp;",
			"<": "&lt;",
			">": "&gt;",
			'"': "&quot;",
			"'": "&#39;"
		},
		Ry = ["a", "b", "c", "d", "e", "f", "g"],
		Ny = function(t, e) {
			return "{" + t + (null == e ? "" : e) + "}"
		},
		Fy = $n,
		Vy = (Object.freeze || Object)({
			addCommas: Ro,
			toCamelCase: No,
			normalizeCssArray: Ey,
			encodeHTML: Fo,
			formatTpl: Vo,
			formatTplSimple: Ho,
			getTooltipMarker: Go,
			formatTime: Xo,
			capitalFirst: Uo,
			truncateText: Fy,
			getTextBoundingRect: Yo,
			getTextRect: qo,
			windowOpen: jo
		}),
		Hy = f,
		Gy = ["left", "right", "top", "bottom", "width", "height"],
		Wy = [
			["width", "left", "right"],
			["height", "top", "bottom"]
		],
		Xy = Zo,
		Uy = (x(Zo, "vertical"), x(Zo, "horizontal"), {
			getBoxLayoutParams: function() {
				return {
					left: this.get("left"),
					top: this.get("top"),
					right: this.get("right"),
					bottom: this.get("bottom"),
					width: this.get("width"),
					height: this.get("height")
				}
			}
		}),
		Yy = lr(),
		qy = fo.extend({
			type: "component",
			id: "",
			name: "",
			mainType: "",
			subType: "",
			componentIndex: 0,
			defaultOption: null,
			ecModel: null,
			dependentModels: [],
			uid: null,
			layoutMode: null,
			$constructor: function(t, e, n, i) {
				fo.call(this, t, e, n, i), this.uid = vo("ec_cpt_model")
			},
			init: function(t, e, n) {
				this.mergeDefaultAndTheme(t, n)
			},
			mergeDefaultAndTheme: function(t, e) {
				var n = this.layoutMode,
					i = n ? Qo(t) : {},
					a = e.getTheme();
				r(t, a.get(this.mainType)), r(t, this.getDefaultOption()), n && $o(t, i, n)
			},
			mergeOption: function(t) {
				r(this.option, t, !0);
				var e = this.layoutMode;
				e && $o(this.option, t, e)
			},
			optionUpdated: function() {},
			getDefaultOption: function() {
				var t = Yy(this);
				if (!t.defaultOption) {
					for (var e = [], n = this.constructor; n;) {
						var i = n.prototype.defaultOption;
						i && e.push(i), n = n.superClass
					}
					for (var a = {}, o = e.length - 1; o >= 0; o--) a = r(a, e[o], !0);
					t.defaultOption = a
				}
				return t.defaultOption
			},
			getReferringComponents: function(t) {
				return this.ecModel.queryComponents({
					mainType: t,
					index: this.get(t + "Index", !0),
					id: this.get(t + "Id", !0)
				})
			}
		});
	_r(qy, {
		registerWhenExtend: !0
	}), mo(qy), yo(qy, ts), c(qy, Uy);
	var jy = "";
	"undefined" != typeof navigator && (jy = navigator.platform || "");
	var Zy = {
			color: ["#c23531", "#2f4554", "#61a0a8", "#d48265", "#91c7ae", "#749f83", "#ca8622", "#bda29a", "#6e7074",
				"#546570", "#c4ccd3"
			],
			gradientColor: ["#f6efa6", "#d88273", "#bf444c"],
			textStyle: {
				fontFamily: jy.match(/^Win/) ? "Microsoft YaHei" : "sans-serif",
				fontSize: 12,
				fontStyle: "normal",
				fontWeight: "normal"
			},
			blendMode: null,
			animation: "auto",
			animationDuration: 1e3,
			animationDurationUpdate: 300,
			animationEasing: "exponentialOut",
			animationEasingUpdate: "cubicOut",
			animationThreshold: 2e3,
			progressiveThreshold: 3e3,
			progressive: 400,
			hoverLayerThreshold: 3e3,
			useUTC: !1
		},
		Ky = lr(),
		$y = {
			clearColorPalette: function() {
				Ky(this).colorIdx = 0, Ky(this).colorNameMap = {}
			},
			getColorFromPalette: function(t, e, n) {
				e = e || this;
				var i = Ky(e),
					r = i.colorIdx || 0,
					a = i.colorNameMap = i.colorNameMap || {};
				if (a.hasOwnProperty(t)) return a[t];
				var o = Ji(this.get("color", !0)),
					s = this.get("colorLayer", !0),
					l = null != n && s ? es(s, n) : o;
				if (l = l || o, l && l.length) {
					var u = l[r];
					return t && (a[t] = u), i.colorIdx = (r + 1) % l.length, u
				}
			}
		},
		Qy = "original",
		Jy = "arrayRows",
		tx = "objectRows",
		ex = "keyedColumns",
		nx = "unknown",
		ix = "typedArray",
		rx = "column",
		ax = "row";
	ns.seriesDataToSource = function(t) {
		return new ns({
			data: t,
			sourceFormat: I(t) ? ix : Qy,
			fromDataset: !1
		})
	}, mr(ns);
	var ox = {
			Must: 1,
			Might: 2,
			Not: 3
		},
		sx = lr(),
		lx = "\x00_ec_inner",
		ux = fo.extend({
			init: function(t, e, n, i) {
				n = n || {}, this.option = null, this._theme = new fo(n), this._optionManager = i
			},
			setOption: function(t, e) {
				O(!(lx in t), "please use chart.getOption()"), this._optionManager.setOption(t, e), this.resetOption(null)
			},
			resetOption: function(t) {
				var e = !1,
					n = this._optionManager;
				if (!t || "recreate" === t) {
					var i = n.mountOption("recreate" === t);
					this.option && "recreate" !== t ? (this.restoreData(), this.mergeOption(i)) : ys.call(this, i), e = !0
				}
				if (("timeline" === t || "media" === t) && this.restoreData(), !t || "recreate" === t || "timeline" === t) {
					var r = n.getTimelineOption(this);
					r && (this.mergeOption(r), e = !0)
				}
				if (!t || "recreate" === t || "media" === t) {
					var a = n.getMediaOption(this, this._api);
					a.length && f(a, function(t) {
						this.mergeOption(t, e = !0)
					}, this)
				}
				return e
			},
			mergeOption: function(t) {
				function e(e, i) {
					var r = Ji(t[e]),
						s = ir(a.get(e), r);
					rr(s), f(s, function(t) {
						var n = t.option;
						S(n) && (t.keyInfo.mainType = e, t.keyInfo.subType = _s(e, n, t.exist))
					});
					var l = xs(a, i);
					n[e] = [], a.set(e, []), f(s, function(t, i) {
						var r = t.exist,
							s = t.option;
						if (O(S(s) || r, "Empty component definition"), s) {
							var u = qy.getClass(e, t.keyInfo.subType, !0);
							if (r && r.constructor === u) r.name = t.keyInfo.name, r.mergeOption(s, this), r.optionUpdated(s, !1);
							else {
								var h = o({
									dependentModels: l,
									componentIndex: i
								}, t.keyInfo);
								r = new u(s, this, this, h), o(r, h), r.init(s, this, this, h), r.optionUpdated(null, !0)
							}
						} else r.mergeOption({}, this), r.optionUpdated({}, !1);
						a.get(e)[i] = r, n[e][i] = r.option
					}, this), "series" === e && ws(this, a.get("series"))
				}
				var n = this.option,
					a = this._componentsMap,
					s = [];
				as(this), f(t, function(t, e) {
					null != t && (qy.hasClass(e) ? e && s.push(e) : n[e] = null == n[e] ? i(t) : r(n[e], t, !0))
				}), qy.topologicalTravel(s, qy.getAllClassMainTypes(), e, this), this._seriesIndicesMap = N(this._seriesIndices =
					this._seriesIndices || [])
			},
			getOption: function() {
				var t = i(this.option);
				return f(t, function(e, n) {
					if (qy.hasClass(n)) {
						for (var e = Ji(e), i = e.length - 1; i >= 0; i--) or(e[i]) && e.splice(i, 1);
						t[n] = e
					}
				}), delete t[lx], t
			},
			getTheme: function() {
				return this._theme
			},
			getComponent: function(t, e) {
				var n = this._componentsMap.get(t);
				return n ? n[e || 0] : void 0
			},
			queryComponents: function(t) {
				var e = t.mainType;
				if (!e) return [];
				var n = t.index,
					i = t.id,
					r = t.name,
					a = this._componentsMap.get(e);
				if (!a || !a.length) return [];
				var o;
				if (null != n) _(n) || (n = [n]), o = v(p(n, function(t) {
					return a[t]
				}), function(t) {
					return !!t
				});
				else if (null != i) {
					var s = _(i);
					o = v(a, function(t) {
						return s && u(i, t.id) >= 0 || !s && t.id === i
					})
				} else if (null != r) {
					var l = _(r);
					o = v(a, function(t) {
						return l && u(r, t.name) >= 0 || !l && t.name === r
					})
				} else o = a.slice();
				return bs(o, t)
			},
			findComponents: function(t) {
				function e(t) {
					var e = r + "Index",
						n = r + "Id",
						i = r + "Name";
					return !t || null == t[e] && null == t[n] && null == t[i] ? null : {
						mainType: r,
						index: t[e],
						id: t[n],
						name: t[i]
					}
				}

				function n(e) {
					return t.filter ? v(e, t.filter) : e
				}
				var i = t.query,
					r = t.mainType,
					a = e(i),
					o = a ? this.queryComponents(a) : this._componentsMap.get(r);
				return n(bs(o, t))
			},
			eachComponent: function(t, e, n) {
				var i = this._componentsMap;
				if ("function" == typeof t) n = e, e = t, i.each(function(t, i) {
					f(t, function(t, r) {
						e.call(n, i, t, r)
					})
				});
				else if (b(t)) f(i.get(t), e, n);
				else if (S(t)) {
					var r = this.findComponents(t);
					f(r, e, n)
				}
			},
			getSeriesByName: function(t) {
				var e = this._componentsMap.get("series");
				return v(e, function(e) {
					return e.name === t
				})
			},
			getSeriesByIndex: function(t) {
				return this._componentsMap.get("series")[t]
			},
			getSeriesByType: function(t) {
				var e = this._componentsMap.get("series");
				return v(e, function(e) {
					return e.subType === t
				})
			},
			getSeries: function() {
				return this._componentsMap.get("series").slice()
			},
			getSeriesCount: function() {
				return this._componentsMap.get("series").length
			},
			eachSeries: function(t, e) {
				Ss(this), f(this._seriesIndices, function(n) {
					var i = this._componentsMap.get("series")[n];
					t.call(e, i, n)
				}, this)
			},
			eachRawSeries: function(t, e) {
				f(this._componentsMap.get("series"), t, e)
			},
			eachSeriesByType: function(t, e, n) {
				Ss(this), f(this._seriesIndices, function(i) {
					var r = this._componentsMap.get("series")[i];
					r.subType === t && e.call(n, r, i)
				}, this)
			},
			eachRawSeriesByType: function(t, e, n) {
				return f(this.getSeriesByType(t), e, n)
			},
			isSeriesFiltered: function(t) {
				return Ss(this), null == this._seriesIndicesMap.get(t.componentIndex)
			},
			getCurrentSeriesIndices: function() {
				return (this._seriesIndices || []).slice()
			},
			filterSeries: function(t, e) {
				Ss(this);
				var n = v(this._componentsMap.get("series"), t, e);
				ws(this, n)
			},
			restoreData: function(t) {
				var e = this._componentsMap;
				ws(this, e.get("series"));
				var n = [];
				e.each(function(t, e) {
					n.push(e)
				}), qy.topologicalTravel(n, qy.getAllClassMainTypes(), function(n) {
					f(e.get(n), function(e) {
						("series" !== n || !vs(e, t)) && e.restoreData()
					})
				})
			}
		});
	c(ux, $y);
	var hx = ["getDom", "getZr", "getWidth", "getHeight", "getDevicePixelRatio", "dispatchAction", "isDisposed", "on",
			"off", "getDataURL", "getConnectedDataURL", "getModel", "getOption", "getViewOfComponentModel",
			"getViewOfSeriesModel"
		],
		cx = {};
	Is.prototype = {
		constructor: Is,
		create: function(t, e) {
			var n = [];
			f(cx, function(i) {
				var r = i.create(t, e);
				n = n.concat(r || [])
			}), this._coordinateSystems = n
		},
		update: function(t, e) {
			f(this._coordinateSystems, function(n) {
				n.update && n.update(t, e)
			})
		},
		getCoordinateSystems: function() {
			return this._coordinateSystems.slice()
		}
	}, Is.register = function(t, e) {
		cx[t] = e
	}, Is.get = function(t) {
		return cx[t]
	};
	var dx = f,
		fx = i,
		px = p,
		gx = r,
		vx = /^(min|max)?(.+)$/;
	Ts.prototype = {
		constructor: Ts,
		setOption: function(t, e) {
			t && f(Ji(t.series), function(t) {
				t && t.data && I(t.data) && B(t.data)
			}), t = fx(t);
			var n = this._optionBackup,
				i = Cs.call(this, t, e, !n);
			this._newBaseOption = i.baseOption, n ? (Ps(n.baseOption, i.baseOption), i.timelineOptions.length && (n.timelineOptions =
					i.timelineOptions), i.mediaList.length && (n.mediaList = i.mediaList), i.mediaDefault && (n.mediaDefault = i.mediaDefault)) :
				this._optionBackup = i
		},
		mountOption: function(t) {
			var e = this._optionBackup;
			return this._timelineOptions = px(e.timelineOptions, fx), this._mediaList = px(e.mediaList, fx), this._mediaDefault =
				fx(e.mediaDefault), this._currentMediaIndices = [], fx(t ? e.baseOption : this._newBaseOption)
		},
		getTimelineOption: function(t) {
			var e, n = this._timelineOptions;
			if (n.length) {
				var i = t.getComponent("timeline");
				i && (e = fx(n[i.getCurrentIndex()], !0))
			}
			return e
		},
		getMediaOption: function() {
			var t = this._api.getWidth(),
				e = this._api.getHeight(),
				n = this._mediaList,
				i = this._mediaDefault,
				r = [],
				a = [];
			if (!n.length && !i) return a;
			for (var o = 0, s = n.length; s > o; o++) As(n[o].query, t, e) && r.push(o);
			return !r.length && i && (r = [-1]), r.length && !ks(r, this._currentMediaIndices) && (a = px(r, function(t) {
				return fx(-1 === t ? i.option : n[t].option)
			})), this._currentMediaIndices = r, a
		}
	};
	var mx = f,
		yx = S,
		xx = ["areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine"],
		_x = function(t, e) {
			mx(Ns(t.series), function(t) {
				yx(t) && Rs(t)
			});
			var n = ["xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "parallelAxis", "radar"];
			e && n.push("valueAxis", "categoryAxis", "logAxis", "timeAxis"), mx(n, function(e) {
				mx(Ns(t[e]), function(t) {
					t && (Bs(t, "axisLabel"), Bs(t.axisPointer, "label"))
				})
			}), mx(Ns(t.parallel), function(t) {
				var e = t && t.parallelAxisDefault;
				Bs(e, "axisLabel"), Bs(e && e.axisPointer, "label")
			}), mx(Ns(t.calendar), function(t) {
				Os(t, "itemStyle"), Bs(t, "dayLabel"), Bs(t, "monthLabel"), Bs(t, "yearLabel")
			}), mx(Ns(t.radar), function(t) {
				Bs(t, "name")
			}), mx(Ns(t.geo), function(t) {
				yx(t) && (zs(t), mx(Ns(t.regions), function(t) {
					zs(t)
				}))
			}), mx(Ns(t.timeline), function(t) {
				zs(t), Os(t, "label"), Os(t, "itemStyle"), Os(t, "controlStyle", !0);
				var e = t.data;
				_(e) && f(e, function(t) {
					S(t) && (Os(t, "label"), Os(t, "itemStyle"))
				})
			}), mx(Ns(t.toolbox), function(t) {
				Os(t, "iconStyle"), mx(t.feature, function(t) {
					Os(t, "iconStyle")
				})
			}), Bs(Fs(t.axisPointer), "label"), Bs(Fs(t.tooltip).axisPointer, "label")
		},
		bx = [
			["x", "left"],
			["y", "top"],
			["x2", "right"],
			["y2", "bottom"]
		],
		Sx = ["grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline"],
		Mx = function(t, e) {
			_x(t, e), t.series = Ji(t.series), f(t.series, function(t) {
				if (S(t)) {
					var e = t.type;
					if ("line" === e) null != t.clipOverflow && (t.clip = t.clipOverflow);
					else if ("pie" === e || "gauge" === e) null != t.clockWise && (t.clockwise = t.clockWise);
					else if ("gauge" === e) {
						var n = Vs(t, "pointer.color");
						null != n && Hs(t, "itemStyle.color", n)
					}
					Gs(t)
				}
			}), t.dataRange && (t.visualMap = t.dataRange), f(Sx, function(e) {
				var n = t[e];
				n && (_(n) || (n = [n]), f(n, function(t) {
					Gs(t)
				}))
			})
		},
		Ix = function(t) {
			var e = N();
			t.eachSeries(function(t) {
				var n = t.get("stack");
				if (n) {
					var i = e.get(n) || e.set(n, []),
						r = t.getData(),
						a = {
							stackResultDimension: r.getCalculationInfo("stackResultDimension"),
							stackedOverDimension: r.getCalculationInfo("stackedOverDimension"),
							stackedDimension: r.getCalculationInfo("stackedDimension"),
							stackedByDimension: r.getCalculationInfo("stackedByDimension"),
							isStackedByIndex: r.getCalculationInfo("isStackedByIndex"),
							data: r,
							seriesModel: t
						};
					if (!a.stackedDimension || !a.isStackedByIndex && !a.stackedByDimension) return;
					i.length && r.setCalculationInfo("stackedOnSeries", i[i.length - 1].seriesModel), i.push(a)
				}
			}), e.each(Ws)
		},
		Tx = Xs.prototype;
	Tx.pure = !1, Tx.persistent = !0, Tx.getSource = function() {
		return this._source
	};
	var Cx = {
			arrayRows_column: {
				pure: !0,
				count: function() {
					return Math.max(0, this._data.length - this._source.startIndex)
				},
				getItem: function(t) {
					return this._data[t + this._source.startIndex]
				},
				appendData: qs
			},
			arrayRows_row: {
				pure: !0,
				count: function() {
					var t = this._data[0];
					return t ? Math.max(0, t.length - this._source.startIndex) : 0
				},
				getItem: function(t) {
					t += this._source.startIndex;
					for (var e = [], n = this._data, i = 0; i < n.length; i++) {
						var r = n[i];
						e.push(r ? r[t] : null)
					}
					return e
				},
				appendData: function() {
					throw new Error('Do not support appendData when set seriesLayoutBy: "row".')
				}
			},
			objectRows: {
				pure: !0,
				count: Us,
				getItem: Ys,
				appendData: qs
			},
			keyedColumns: {
				pure: !0,
				count: function() {
					var t = this._source.dimensionsDefine[0].name,
						e = this._data[t];
					return e ? e.length : 0
				},
				getItem: function(t) {
					for (var e = [], n = this._source.dimensionsDefine, i = 0; i < n.length; i++) {
						var r = this._data[n[i].name];
						e.push(r ? r[t] : null)
					}
					return e
				},
				appendData: function(t) {
					var e = this._data;
					f(t, function(t, n) {
						for (var i = e[n] || (e[n] = []), r = 0; r < (t || []).length; r++) i.push(t[r])
					})
				}
			},
			original: {
				count: Us,
				getItem: Ys,
				appendData: qs
			},
			typedArray: {
				persistent: !1,
				pure: !0,
				count: function() {
					return this._data ? this._data.length / this._dimSize : 0
				},
				getItem: function(t, e) {
					t -= this._offset, e = e || [];
					for (var n = this._dimSize * t, i = 0; i < this._dimSize; i++) e[i] = this._data[n + i];
					return e
				},
				appendData: function(t) {
					op && O(I(t), "Added data must be TypedArray if data in initialization is TypedArray"), this._data = t
				},
				clean: function() {
					this._offset += this.count(), this._data = null
				}
			}
		},
		Ax = {
			arrayRows: js,
			objectRows: function(t, e, n, i) {
				return null != n ? t[i] : t
			},
			keyedColumns: js,
			original: function(t, e, n) {
				var i = er(t);
				return null != n && i instanceof Array ? i[n] : i
			},
			typedArray: js
		},
		Dx = {
			arrayRows: Zs,
			objectRows: function(t, e) {
				return Ks(t[e], this._dimensionInfos[e])
			},
			keyedColumns: Zs,
			original: function(t, e, n, i) {
				var r = t && (null == t.value ? t : t.value);
				return !this._rawData.pure && nr(t) && (this.hasItemOption = !0), Ks(r instanceof Array ? r[i] : r, this._dimensionInfos[
					e])
			},
			typedArray: function(t, e, n, i) {
				return t[i]
			}
		},
		kx = /\{@(.+?)\}/g,
		Px = {
			getDataParams: function(t, e) {
				var n = this.getData(e),
					i = this.getRawValue(t, e),
					r = n.getRawIndex(t),
					a = n.getName(t),
					o = n.getRawDataItem(t),
					s = n.getItemVisual(t, "color"),
					l = n.getItemVisual(t, "borderColor"),
					u = this.ecModel.getComponent("tooltip"),
					h = u && u.get("renderMode"),
					c = fr(h),
					d = this.mainType,
					f = "series" === d,
					p = n.userOutput;
				return {
					componentType: d,
					componentSubType: this.subType,
					componentIndex: this.componentIndex,
					seriesType: f ? this.subType : null,
					seriesIndex: this.seriesIndex,
					seriesId: f ? this.id : null,
					seriesName: f ? this.name : null,
					name: a,
					dataIndex: r,
					data: o,
					dataType: e,
					value: i,
					color: s,
					borderColor: l,
					dimensionNames: p ? p.dimensionNames : null,
					encode: p ? p.encode : null,
					marker: Go({
						color: s,
						renderMode: c
					}),
					$vars: ["seriesName", "name", "value"]
				}
			},
			getFormattedLabel: function(t, e, n, i, r) {
				e = e || "normal";
				var a = this.getData(n),
					o = a.getItemModel(t),
					s = this.getDataParams(t, n);
				null != i && s.value instanceof Array && (s.value = s.value[i]);
				var l = o.get("normal" === e ? [r || "label", "formatter"] : [e, r || "label", "formatter"]);
				if ("function" == typeof l) return s.status = e, s.dimensionIndex = i, l(s);
				if ("string" == typeof l) {
					var u = Vo(l, s);
					return u.replace(kx, function(e, n) {
						var i = n.length;
						return "[" === n.charAt(0) && "]" === n.charAt(i - 1) && (n = +n.slice(1, i - 1)), $s(a, t, n)
					})
				}
			},
			getRawValue: function(t, e) {
				return $s(this.getData(e), t)
			},
			formatTooltip: function() {}
		},
		Lx = tl.prototype;
	Lx.perform = function(t) {
		function e(t) {
			return !(t >= 1) && (t = 1), t
		}
		var n = this._upstream,
			i = t && t.skip;
		if (this._dirty && n) {
			var r = this.context;
			r.data = r.outputData = n.context.outputData
		}
		this.__pipeline && (this.__pipeline.currentTask = this);
		var a;
		this._plan && !i && (a = this._plan(this.context));
		var o = e(this._modBy),
			s = this._modDataCount || 0,
			l = e(t && t.modBy),
			u = t && t.modDataCount || 0;
		(o !== l || s !== u) && (a = "reset");
		var h;
		(this._dirty || "reset" === a) && (this._dirty = !1, h = nl(this, i)), this._modBy = l, this._modDataCount = u;
		var c = t && t.step;
		if (n ? (op && O(null != n._outputDueEnd), this._dueEnd = n._outputDueEnd) : (op && O(!this._progress || this._count),
				this._dueEnd = this._count ? this._count(this.context) : 1 / 0), this._progress) {
			var d = this._dueIndex,
				f = Math.min(null != c ? this._dueIndex + c : 1 / 0, this._dueEnd);
			if (!i && (h || f > d)) {
				var p = this._progress;
				if (_(p))
					for (var g = 0; g < p.length; g++) el(this, p[g], d, f, l, u);
				else el(this, p, d, f, l, u)
			}
			this._dueIndex = f;
			var v = null != this._settedOutputEnd ? this._settedOutputEnd : f;
			op && O(v >= this._outputDueEnd), this._outputDueEnd = v
		} else this._dueIndex = this._outputDueEnd = null != this._settedOutputEnd ? this._settedOutputEnd : this._dueEnd;
		return this.unfinished()
	};
	var Ox = function() {
		function t() {
			return n > i ? i++ : null
		}

		function e() {
			var t = i % o * r + Math.ceil(i / o),
				e = i >= n ? null : a > t ? t : i;
			return i++, e
		}
		var n, i, r, a, o, s = {
			reset: function(l, u, h, c) {
				i = l, n = u, r = h, a = c, o = Math.ceil(a / r), s.next = r > 1 && a > 0 ? e : t
			}
		};
		return s
	}();
	Lx.dirty = function() {
		this._dirty = !0, this._onDirty && this._onDirty(this.context)
	}, Lx.unfinished = function() {
		return this._progress && this._dueIndex < this._dueEnd
	}, Lx.pipe = function(t) {
		op && O(t && !t._disposed && t !== this), (this._downstream !== t || this._dirty) && (this._downstream = t, t._upstream =
			this, t.dirty())
	}, Lx.dispose = function() {
		this._disposed || (this._upstream && (this._upstream._downstream = null), this._downstream && (this._downstream._upstream =
			null), this._dirty = !1, this._disposed = !0)
	}, Lx.getUpstream = function() {
		return this._upstream
	}, Lx.getDownstream = function() {
		return this._downstream
	}, Lx.setOutputEnd = function(t) {
		this._outputDueEnd = this._settedOutputEnd = t
	};
	var Ex = lr(),
		Bx = qy.extend({
			type: "series.__base__",
			seriesIndex: 0,
			coordinateSystem: null,
			defaultOption: null,
			legendVisualProvider: null,
			visualColorAccessPath: "itemStyle.color",
			visualBorderColorAccessPath: "itemStyle.borderColor",
			layoutMode: null,
			init: function(t, e, n) {
				this.seriesIndex = this.componentIndex, this.dataTask = Js({
					count: al,
					reset: ol
				}), this.dataTask.context = {
					model: this
				}, this.mergeDefaultAndTheme(t, n), os(this);
				var i = this.getInitialData(t, n);
				ll(i, this), this.dataTask.context.data = i, op && O(i, "getInitialData returned invalid data."), Ex(this).dataBeforeProcessed =
					i, il(this)
			},
			mergeDefaultAndTheme: function(t, e) {
				var n = this.layoutMode,
					i = n ? Qo(t) : {},
					a = this.subType;
				qy.hasClass(a) && (a += "Series"), r(t, e.getTheme().get(this.subType)), r(t, this.getDefaultOption()), tr(t,
					"label", ["show"]), this.fillDataTextStyle(t.data), n && $o(t, i, n)
			},
			mergeOption: function(t, e) {
				t = r(this.option, t, !0), this.fillDataTextStyle(t.data);
				var n = this.layoutMode;
				n && $o(this.option, t, n), os(this);
				var i = this.getInitialData(t, e);
				ll(i, this), this.dataTask.dirty(), this.dataTask.context.data = i, Ex(this).dataBeforeProcessed = i, il(this)
			},
			fillDataTextStyle: function(t) {
				if (t && !I(t))
					for (var e = ["show"], n = 0; n < t.length; n++) t[n] && t[n].label && tr(t[n], "label", e)
			},
			getInitialData: function() {},
			appendData: function(t) {
				var e = this.getRawData();
				e.appendData(t.data)
			},
			getData: function(t) {
				var e = hl(this);
				if (e) {
					var n = e.context.data;
					return null == t ? n : n.getLinkedData(t)
				}
				return Ex(this).data
			},
			setData: function(t) {
				var e = hl(this);
				if (e) {
					var n = e.context;
					n.data !== t && e.modifyOutputEnd && e.setOutputEnd(t.count()), n.outputData = t, e !== this.dataTask && (n.data =
						t)
				}
				Ex(this).data = t
			},
			getSource: function() {
				return rs(this)
			},
			getRawData: function() {
				return Ex(this).dataBeforeProcessed
			},
			getBaseAxis: function() {
				var t = this.coordinateSystem;
				return t && t.getBaseAxis && t.getBaseAxis()
			},
			formatTooltip: function(t, e, n, i) {
				function r(n) {
					function r(t, n) {
						var r = c.getDimensionInfo(n);
						if (r && r.otherDims.tooltip !== !1) {
							var d = r.type,
								f = "sub" + o.seriesIndex + "at" + h,
								p = Go({
									color: y,
									type: "subItem",
									renderMode: i,
									markerId: f
								}),
								g = "string" == typeof p ? p : p.content,
								v = (a ? g + Fo(r.displayName || "-") + ": " : "") + Fo("ordinal" === d ? t + "" : "time" === d ? e ? "" :
									Xo("yyyy/MM/dd hh:mm:ss", t) : Ro(t));
							v && s.push(v), l && (u[f] = y, ++h)
						}
					}
					var a = g(n, function(t, e, n) {
							var i = c.getDimensionInfo(n);
							return t |= i && i.tooltip !== !1 && null != i.displayName
						}, 0),
						s = [];
					d.length ? f(d, function(e) {
						r($s(c, t, e), e)
					}) : f(n, r);
					var p = a ? l ? "\n" : "<br/>" : "",
						v = p + s.join(p || ", ");
					return {
						renderMode: i,
						content: v,
						style: u
					}
				}

				function a(t) {
					return {
						renderMode: i,
						content: Fo(Ro(t)),
						style: u
					}
				}
				var o = this;
				i = i || "html";
				var s = "html" === i ? "<br/>" : "\n",
					l = "richText" === i,
					u = {},
					h = 0,
					c = this.getData(),
					d = c.mapDimension("defaultedTooltip", !0),
					p = d.length,
					v = this.getRawValue(t),
					m = _(v),
					y = c.getItemVisual(t, "color");
				S(y) && y.colorStops && (y = (y.colorStops[0] || {}).color), y = y || "transparent";
				var x = p > 1 || m && !p ? r(v) : a(p ? $s(c, t, d[0]) : m ? v[0] : v),
					w = x.content,
					b = o.seriesIndex + "at" + h,
					M = Go({
						color: y,
						type: "item",
						renderMode: i,
						markerId: b
					});
				u[b] = y, ++h;
				var I = c.getName(t),
					T = this.name;
				ar(this) || (T = ""), T = T ? Fo(T) + (e ? ": " : s) : "";
				var C = "string" == typeof M ? M : M.content,
					A = e ? C + T + w : T + C + (I ? Fo(I) + ": " + w : w);
				return {
					html: A,
					markers: u
				}
			},
			isAnimationEnabled: function() {
				if (hp.node) return !1;
				var t = this.getShallow("animation");
				return t && this.getData().count() > this.getShallow("animationThreshold") && (t = !1), t
			},
			restoreData: function() {
				this.dataTask.dirty()
			},
			getColorFromPalette: function(t, e, n) {
				var i = this.ecModel,
					r = $y.getColorFromPalette.call(this, t, e, n);
				return r || (r = i.getColorFromPalette(t, e, n)), r
			},
			coordDimToDataDim: function(t) {
				return this.getRawData().mapDimension(t, !0)
			},
			getProgressive: function() {
				return this.get("progressive")
			},
			getProgressiveThreshold: function() {
				return this.get("progressiveThreshold")
			},
			getAxisTooltipData: null,
			getTooltipPosition: null,
			pipeTask: null,
			preventIncremental: null,
			pipelineContext: null
		});
	c(Bx, Px), c(Bx, $y);
	var zx = function() {
		this.group = new Mg, this.uid = vo("viewComponent")
	};
	zx.prototype = {
		constructor: zx,
		init: function() {},
		render: function() {},
		dispose: function() {},
		filterForExposedEvent: null
	};
	var Rx = zx.prototype;
	Rx.updateView = Rx.updateLayout = Rx.updateVisual = function() {}, vr(zx), _r(zx, {
		registerWhenExtend: !0
	});
	var Nx = function() {
			var t = lr();
			return function(e) {
				var n = t(e),
					i = e.pipelineContext,
					r = n.large,
					a = n.progressiveRender,
					o = n.large = i && i.large,
					s = n.progressiveRender = i && i.progressiveRender;
				return !!(r ^ o || a ^ s) && "reset"
			}
		},
		Fx = lr(),
		Vx = Nx();
	cl.prototype = {
		type: "chart",
		init: function() {},
		render: function() {},
		highlight: function(t, e, n, i) {
			fl(t.getData(), i, "emphasis")
		},
		downplay: function(t, e, n, i) {
			fl(t.getData(), i, "normal")
		},
		remove: function() {
			this.group.removeAll()
		},
		dispose: function() {},
		incrementalPrepareRender: null,
		incrementalRender: null,
		updateTransform: null,
		filterForExposedEvent: null
	};
	var Hx = cl.prototype;
	Hx.updateView = Hx.updateLayout = Hx.updateVisual = function(t, e, n, i) {
		this.render(t, e, n, i)
	}, vr(cl, ["dispose"]), _r(cl, {
		registerWhenExtend: !0
	}), cl.markUpdateMethod = function(t, e) {
		Fx(t).updateMethod = e
	};
	var Gx = {
			incrementalPrepareRender: {
				progress: function(t, e) {
					e.view.incrementalRender(t, e.model, e.ecModel, e.api, e.payload)
				}
			},
			render: {
				forceFirstProgress: !0,
				progress: function(t, e) {
					e.view.render(e.model, e.ecModel, e.api, e.payload)
				}
			}
		},
		Wx = "\x00__throttleOriginMethod",
		Xx = "\x00__throttleRate",
		Ux = "\x00__throttleType",
		Yx = {
			createOnAllSeries: !0,
			performRawSeries: !0,
			reset: function(t, e) {
				var n = t.getData(),
					i = (t.visualColorAccessPath || "itemStyle.color").split("."),
					r = t.get(i),
					a = !w(r) || r instanceof ry ? null : r;
				(!r || a) && (r = t.getColorFromPalette(t.name, null, e.getSeriesCount())), n.setVisual("color", r);
				var o = (t.visualBorderColorAccessPath || "itemStyle.borderColor").split("."),
					s = t.get(o);
				if (n.setVisual("borderColor", s), !e.isSeriesFiltered(t)) {
					a && n.each(function(e) {
						n.setItemVisual(e, "color", a(t.getDataParams(e)))
					});
					var l = function(t, e) {
						var n = t.getItemModel(e),
							r = n.get(i, !0),
							a = n.get(o, !0);
						null != r && t.setItemVisual(e, "color", r), null != a && t.setItemVisual(e, "borderColor", a)
					};
					return {
						dataEach: n.hasItemOption ? l : null
					}
				}
			}
		},
		qx = {
			legend: {
				selector: {
					all: "全选",
					inverse: "反选"
				}
			},
			toolbox: {
				brush: {
					title: {
						rect: "矩形选择",
						polygon: "圈选",
						lineX: "横向选择",
						lineY: "纵向选择",
						keep: "保持选择",
						clear: "清除选择"
					}
				},
				dataView: {
					title: "数据视图",
					lang: ["数据视图", "关闭", "刷新"]
				},
				dataZoom: {
					title: {
						zoom: "区域缩放",
						back: "区域缩放还原"
					}
				},
				magicType: {
					title: {
						line: "切换为折线图",
						bar: "切换为柱状图",
						stack: "切换为堆叠",
						tiled: "切换为平铺"
					}
				},
				restore: {
					title: "还原"
				},
				saveAsImage: {
					title: "保存为图片",
					lang: ["右键另存为图片"]
				}
			},
			series: {
				typeNames: {
					pie: "饼图",
					bar: "柱状图",
					line: "折线图",
					scatter: "散点图",
					effectScatter: "涟漪散点图",
					radar: "雷达图",
					tree: "树图",
					treemap: "矩形树图",
					boxplot: "箱型图",
					candlestick: "K线图",
					k: "K线图",
					heatmap: "热力图",
					map: "地图",
					parallel: "平行坐标图",
					lines: "线图",
					graph: "关系图",
					sankey: "桑基图",
					funnel: "漏斗图",
					gauge: "仪表盘图",
					pictorialBar: "象形柱图",
					themeRiver: "主题河流图",
					sunburst: "旭日图"
				}
			},
			aria: {
				general: {
					withTitle: "这是一个关于“{title}”的图表。",
					withoutTitle: "这是一个图表，"
				},
				series: {
					single: {
						prefix: "",
						withName: "图表类型是{seriesType}，表示{seriesName}。",
						withoutName: "图表类型是{seriesType}。"
					},
					multiple: {
						prefix: "它由{seriesCount}个图表系列组成。",
						withName: "第{seriesId}个系列是一个表示{seriesName}的{seriesType}，",
						withoutName: "第{seriesId}个系列是一个{seriesType}，",
						separator: {
							middle: "；",
							end: "。"
						}
					}
				},
				data: {
					allData: "其数据是——",
					partialData: "其中，前{displayCnt}项是——",
					withName: "{name}的数据是{value}",
					withoutName: "{value}",
					separator: {
						middle: "，",
						end: ""
					}
				}
			}
		},
		jx = function(t, e) {
			function n(t, e) {
				if ("string" != typeof t) return t;
				var n = t;
				return f(e, function(t, e) {
					n = n.replace(new RegExp("\\{\\s*" + e + "\\s*\\}", "g"), t)
				}), n
			}

			function i(t) {
				var e = o.get(t);
				if (null == e) {
					for (var n = t.split("."), i = qx.aria, r = 0; r < n.length; ++r) i = i[n[r]];
					return i
				}
				return e
			}

			function r() {
				var t = e.getModel("title").option;
				return t && t.length && (t = t[0]), t && t.text
			}

			function a(t) {
				return qx.series.typeNames[t] || "自定义图"
			}
			var o = e.getModel("aria");
			if (o.get("show")) {
				if (o.get("description")) return void t.setAttribute("aria-label", o.get("description"));
				var s = 0;
				e.eachSeries(function() {
					++s
				}, this);
				var l, u = o.get("data.maxCount") || 10,
					h = o.get("series.maxCount") || 10,
					c = Math.min(s, h);
				if (!(1 > s)) {
					var d = r();
					l = d ? n(i("general.withTitle"), {
						title: d
					}) : i("general.withoutTitle");
					var p = [],
						g = s > 1 ? "series.multiple.prefix" : "series.single.prefix";
					l += n(i(g), {
						seriesCount: s
					}), e.eachSeries(function(t, e) {
						if (c > e) {
							var r, o = t.get("name"),
								l = "series." + (s > 1 ? "multiple" : "single") + ".";
							r = i(o ? l + "withName" : l + "withoutName"), r = n(r, {
								seriesId: t.seriesIndex,
								seriesName: t.get("name"),
								seriesType: a(t.subType)
							});
							var h = t.getData();
							window.data = h, r += h.count() > u ? n(i("data.partialData"), {
								displayCnt: u
							}) : i("data.allData");
							for (var d = [], f = 0; f < h.count(); f++)
								if (u > f) {
									var g = h.getName(f),
										v = $s(h, f);
									d.push(n(i(g ? "data.withName" : "data.withoutName"), {
										name: g,
										value: v
									}))
								} r += d.join(i("data.separator.middle")) + i("data.separator.end"), p.push(r)
						}
					}), l += p.join(i("series.multiple.separator.middle")) + i("series.multiple.separator.end"), t.setAttribute(
						"aria-label", l)
				}
			}
		},
		Zx = Math.PI,
		Kx = function(t, e) {
			e = e || {}, s(e, {
				text: "loading",
				textColor: "#000",
				fontSize: "12px",
				maskColor: "rgba(255, 255, 255, 0.8)",
				showSpinner: !0,
				color: "#c23531",
				spinnerRadius: 10,
				lineWidth: 5,
				zlevel: 0
			});
			var n = new Mg,
				i = new $m({
					style: {
						fill: e.maskColor
					},
					zlevel: e.zlevel,
					z: 1e4
				});
			n.add(i);
			var r = e.fontSize + " sans-serif",
				a = new $m({
					style: {
						fill: "none",
						text: e.text,
						font: r,
						textPosition: "right",
						textDistance: 10,
						textFill: e.textColor
					},
					zlevel: e.zlevel,
					z: 10001
				});
			if (n.add(a), e.showSpinner) {
				var o = new ny({
					shape: {
						startAngle: -Zx / 2,
						endAngle: -Zx / 2 + .1,
						r: e.spinnerRadius
					},
					style: {
						stroke: e.color,
						lineCap: "round",
						lineWidth: e.lineWidth
					},
					zlevel: e.zlevel,
					z: 10001
				});
				o.animateShape(!0).when(1e3, {
					endAngle: 3 * Zx / 2
				}).start("circularInOut"), o.animateShape(!0).when(1e3, {
					startAngle: 3 * Zx / 2
				}).delay(300).start("circularInOut"), n.add(o)
			}
			return n.resize = function() {
				var n = Xn(e.text, r),
					s = e.showSpinner ? e.spinnerRadius : 0,
					l = (t.getWidth() - 2 * s - (e.showSpinner && n ? 10 : 0) - n) / 2 - (e.showSpinner ? 0 : n / 2),
					u = t.getHeight() / 2;
				e.showSpinner && o.setShape({
					cx: l,
					cy: u
				}), a.setShape({
					x: l - s,
					y: u - s,
					width: 2 * s,
					height: 2 * s
				}), i.setShape({
					x: 0,
					y: 0,
					width: t.getWidth(),
					height: t.getHeight()
				})
			}, n.resize(), n
		},
		$x = yl.prototype;
	$x.restoreData = function(t, e) {
		t.restoreData(e), this._stageTaskMap.each(function(t) {
			var e = t.overallTask;
			e && e.dirty()
		})
	}, $x.getPerformArgs = function(t, e) {
		if (t.__pipeline) {
			var n = this._pipelineMap.get(t.__pipeline.id),
				i = n.context,
				r = !e && n.progressiveEnabled && (!i || i.progressiveRender) && t.__idxInPipeline > n.blockIndex,
				a = r ? n.step : null,
				o = i && i.modDataCount,
				s = null != o ? Math.ceil(o / a) : null;
			return {
				step: a,
				modBy: s,
				modDataCount: o
			}
		}
	}, $x.getPipeline = function(t) {
		return this._pipelineMap.get(t)
	}, $x.updateStreamModes = function(t, e) {
		var n = this._pipelineMap.get(t.uid),
			i = t.getData(),
			r = i.count(),
			a = n.progressiveEnabled && e.incrementalPrepareRender && r >= n.threshold,
			o = t.get("large") && r >= t.get("largeThreshold"),
			s = "mod" === t.get("progressiveChunkMode") ? r : null;
		t.pipelineContext = n.context = {
			progressiveRender: a,
			modDataCount: s,
			large: o
		}
	}, $x.restorePipelines = function(t) {
		var e = this,
			n = e._pipelineMap = N();
		t.eachSeries(function(t) {
			var i = t.getProgressive(),
				r = t.uid;
			n.set(r, {
				id: r,
				head: null,
				tail: null,
				threshold: t.getProgressiveThreshold(),
				progressiveEnabled: i && !(t.preventIncremental && t.preventIncremental()),
				blockIndex: -1,
				step: Math.round(i || 700),
				count: 0
			}), kl(e, t, t.dataTask)
		})
	}, $x.prepareStageTasks = function() {
		var t = this._stageTaskMap,
			e = this.ecInstance.getModel(),
			n = this.api;
		f(this._allHandlers, function(i) {
			var r = t.get(i.uid) || t.set(i.uid, []);
			i.reset && _l(this, i, r, e, n), i.overallReset && wl(this, i, r, e, n)
		}, this)
	}, $x.prepareView = function(t, e, n, i) {
		var r = t.renderTask,
			a = r.context;
		a.model = e, a.ecModel = n, a.api = i, r.__block = !t.incrementalPrepareRender, kl(this, e, r)
	}, $x.performDataProcessorTasks = function(t, e) {
		xl(this, this._dataProcessorHandlers, t, e, {
			block: !0
		})
	}, $x.performVisualTasks = function(t, e, n) {
		xl(this, this._visualHandlers, t, e, n)
	}, $x.performSeriesTasks = function(t) {
		var e;
		t.eachSeries(function(t) {
			e |= t.dataTask.perform()
		}), this.unfinished |= e
	}, $x.plan = function() {
		this._pipelineMap.each(function(t) {
			var e = t.tail;
			do {
				if (e.__block) {
					t.blockIndex = e.__idxInPipeline;
					break
				}
				e = e.getUpstream()
			} while (e)
		})
	};
	var Qx = $x.updatePayload = function(t, e) {
			"remain" !== e && (t.context.payload = e)
		},
		Jx = Al(0);
	yl.wrapStageHandler = function(t, e) {
		return w(t) && (t = {
			overallReset: t,
			seriesType: Pl(t)
		}), t.uid = vo("stageHandler"), e && (t.visualType = e), t
	};
	var t_, e_ = {},
		n_ = {};
	Ll(e_, ux), Ll(n_, Ms), e_.eachSeriesByType = e_.eachRawSeriesByType = function(t) {
		t_ = t
	}, e_.eachComponent = function(t) {
		"series" === t.mainType && t.subType && (t_ = t.subType)
	};
	var i_ = ["#37A2DA", "#32C5E9", "#67E0E3", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#E062AE", "#E690D1",
			"#e7bcf3", "#9d96f5", "#8378EA", "#96BFFF"
		],
		r_ = {
			color: i_,
			colorLayer: [
				["#37A2DA", "#ffd85c", "#fd7b5f"],
				["#37A2DA", "#67E0E3", "#FFDB5C", "#ff9f7f", "#E062AE", "#9d96f5"],
				["#37A2DA", "#32C5E9", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#e7bcf3", "#8378EA", "#96BFFF"], i_
			]
		},
		a_ = "#eee",
		o_ = function() {
			return {
				axisLine: {
					lineStyle: {
						color: a_
					}
				},
				axisTick: {
					lineStyle: {
						color: a_
					}
				},
				axisLabel: {
					textStyle: {
						color: a_
					}
				},
				splitLine: {
					lineStyle: {
						type: "dashed",
						color: "#aaa"
					}
				},
				splitArea: {
					areaStyle: {
						color: a_
					}
				}
			}
		},
		s_ = ["#dd6b66", "#759aa0", "#e69d87", "#8dc1a9", "#ea7e53", "#eedd78", "#73a373", "#73b9bc", "#7289ab", "#91ca8c",
			"#f49f42"
		],
		l_ = {
			color: s_,
			backgroundColor: "#333",
			tooltip: {
				axisPointer: {
					lineStyle: {
						color: a_
					},
					crossStyle: {
						color: a_
					},
					label: {
						color: "#000"
					}
				}
			},
			legend: {
				textStyle: {
					color: a_
				}
			},
			textStyle: {
				color: a_
			},
			title: {
				textStyle: {
					color: a_
				}
			},
			toolbox: {
				iconStyle: {
					normal: {
						borderColor: a_
					}
				}
			},
			dataZoom: {
				textStyle: {
					color: a_
				}
			},
			visualMap: {
				textStyle: {
					color: a_
				}
			},
			timeline: {
				lineStyle: {
					color: a_
				},
				itemStyle: {
					normal: {
						color: s_[1]
					}
				},
				label: {
					normal: {
						textStyle: {
							color: a_
						}
					}
				},
				controlStyle: {
					normal: {
						color: a_,
						borderColor: a_
					}
				}
			},
			timeAxis: o_(),
			logAxis: o_(),
			valueAxis: o_(),
			categoryAxis: o_(),
			line: {
				symbol: "circle"
			},
			graph: {
				color: s_
			},
			gauge: {
				title: {
					textStyle: {
						color: a_
					}
				}
			},
			candlestick: {
				itemStyle: {
					normal: {
						color: "#FD1050",
						color0: "#0CF49B",
						borderColor: "#FD1050",
						borderColor0: "#0CF49B"
					}
				}
			}
		};
	l_.categoryAxis.splitLine.show = !1, qy.extend({
		type: "dataset",
		defaultOption: {
			seriesLayoutBy: rx,
			sourceHeader: null,
			dimensions: null,
			source: null
		},
		optionUpdated: function() {
			is(this)
		}
	}), zx.extend({
		type: "dataset"
	});
	var u_ = ta.extend({
			type: "ellipse",
			shape: {
				cx: 0,
				cy: 0,
				rx: 0,
				ry: 0
			},
			buildPath: function(t, e) {
				var n = .5522848,
					i = e.cx,
					r = e.cy,
					a = e.rx,
					o = e.ry,
					s = a * n,
					l = o * n;
				t.moveTo(i - a, r), t.bezierCurveTo(i - a, r - l, i - s, r - o, i, r - o), t.bezierCurveTo(i + s, r - o, i + a,
					r - l, i + a, r), t.bezierCurveTo(i + a, r + l, i + s, r + o, i, r + o), t.bezierCurveTo(i - s, r + o, i - a,
					r + l, i - a, r), t.closePath()
			}
		}),
		h_ = /[\s,]+/;
	El.prototype.parse = function(t, e) {
		e = e || {};
		var n = Ol(t);
		if (!n) throw new Error("Illegal svg");
		var i = new Mg;
		this._root = i;
		var r = n.getAttribute("viewBox") || "",
			a = parseFloat(n.getAttribute("width") || e.width),
			o = parseFloat(n.getAttribute("height") || e.height);
		isNaN(a) && (a = null), isNaN(o) && (o = null), Nl(n, i, null, !0);
		for (var s = n.firstChild; s;) this._parseNode(s, i), s = s.nextSibling;
		var l, u;
		if (r) {
			var h = E(r).split(h_);
			h.length >= 4 && (l = {
				x: parseFloat(h[0] || 0),
				y: parseFloat(h[1] || 0),
				width: parseFloat(h[2]),
				height: parseFloat(h[3])
			})
		}
		if (l && null != a && null != o && (u = Gl(l, a, o), !e.ignoreViewBox)) {
			var c = i;
			i = new Mg, i.add(c), c.scale = u.scale.slice(), c.position = u.position.slice()
		}
		return e.ignoreRootClip || null == a || null == o || i.setClipPath(new $m({
			shape: {
				x: 0,
				y: 0,
				width: a,
				height: o
			}
		})), {
			root: i,
			width: a,
			height: o,
			viewBoxRect: l,
			viewBoxTransform: u
		}
	}, El.prototype._parseNode = function(t, e) {
		var n = t.nodeName.toLowerCase();
		"defs" === n ? this._isDefine = !0 : "text" === n && (this._isText = !0);
		var i;
		if (this._isDefine) {
			var r = d_[n];
			if (r) {
				var a = r.call(this, t),
					o = t.getAttribute("id");
				o && (this._defs[o] = a)
			}
		} else {
			var r = c_[n];
			r && (i = r.call(this, t, e), e.add(i))
		}
		for (var s = t.firstChild; s;) 1 === s.nodeType && this._parseNode(s, i), 3 === s.nodeType && this._isText && this._parseText(
			s, i), s = s.nextSibling;
		"defs" === n ? this._isDefine = !1 : "text" === n && (this._isText = !1)
	}, El.prototype._parseText = function(t, e) {
		if (1 === t.nodeType) {
			var n = t.getAttribute("dx") || 0,
				i = t.getAttribute("dy") || 0;
			this._textX += parseFloat(n), this._textY += parseFloat(i)
		}
		var r = new Fm({
			style: {
				text: t.textContent,
				transformText: !0
			},
			position: [this._textX || 0, this._textY || 0]
		});
		zl(e, r), Nl(t, r, this._defs);
		var a = r.style.fontSize;
		a && 9 > a && (r.style.fontSize = 9, r.scale = r.scale || [1, 1], r.scale[0] *= a / 9, r.scale[1] *= a / 9);
		var o = r.getBoundingRect();
		return this._textX += o.width, e.add(r), r
	};
	var c_ = {
			g: function(t, e) {
				var n = new Mg;
				return zl(e, n), Nl(t, n, this._defs), n
			},
			rect: function(t, e) {
				var n = new $m;
				return zl(e, n), Nl(t, n, this._defs), n.setShape({
					x: parseFloat(t.getAttribute("x") || 0),
					y: parseFloat(t.getAttribute("y") || 0),
					width: parseFloat(t.getAttribute("width") || 0),
					height: parseFloat(t.getAttribute("height") || 0)
				}), n
			},
			circle: function(t, e) {
				var n = new Vm;
				return zl(e, n), Nl(t, n, this._defs), n.setShape({
					cx: parseFloat(t.getAttribute("cx") || 0),
					cy: parseFloat(t.getAttribute("cy") || 0),
					r: parseFloat(t.getAttribute("r") || 0)
				}), n
			},
			line: function(t, e) {
				var n = new Jm;
				return zl(e, n), Nl(t, n, this._defs), n.setShape({
					x1: parseFloat(t.getAttribute("x1") || 0),
					y1: parseFloat(t.getAttribute("y1") || 0),
					x2: parseFloat(t.getAttribute("x2") || 0),
					y2: parseFloat(t.getAttribute("y2") || 0)
				}), n
			},
			ellipse: function(t, e) {
				var n = new u_;
				return zl(e, n), Nl(t, n, this._defs), n.setShape({
					cx: parseFloat(t.getAttribute("cx") || 0),
					cy: parseFloat(t.getAttribute("cy") || 0),
					rx: parseFloat(t.getAttribute("rx") || 0),
					ry: parseFloat(t.getAttribute("ry") || 0)
				}), n
			},
			polygon: function(t, e) {
				var n = t.getAttribute("points");
				n && (n = Rl(n));
				var i = new qm({
					shape: {
						points: n || []
					}
				});
				return zl(e, i), Nl(t, i, this._defs), i
			},
			polyline: function(t, e) {
				var n = new ta;
				zl(e, n), Nl(t, n, this._defs);
				var i = t.getAttribute("points");
				i && (i = Rl(i));
				var r = new jm({
					shape: {
						points: i || []
					}
				});
				return r
			},
			image: function(t, e) {
				var n = new Ci;
				return zl(e, n), Nl(t, n, this._defs), n.setStyle({
					image: t.getAttribute("xlink:href"),
					x: t.getAttribute("x"),
					y: t.getAttribute("y"),
					width: t.getAttribute("width"),
					height: t.getAttribute("height")
				}), n
			},
			text: function(t, e) {
				var n = t.getAttribute("x") || 0,
					i = t.getAttribute("y") || 0,
					r = t.getAttribute("dx") || 0,
					a = t.getAttribute("dy") || 0;
				this._textX = parseFloat(n) + parseFloat(r), this._textY = parseFloat(i) + parseFloat(a);
				var o = new Mg;
				return zl(e, o), Nl(t, o, this._defs), o
			},
			tspan: function(t, e) {
				var n = t.getAttribute("x"),
					i = t.getAttribute("y");
				null != n && (this._textX = parseFloat(n)), null != i && (this._textY = parseFloat(i));
				var r = t.getAttribute("dx") || 0,
					a = t.getAttribute("dy") || 0,
					o = new Mg;
				return zl(e, o), Nl(t, o, this._defs), this._textX += r, this._textY += a, o
			},
			path: function(t, e) {
				var n = t.getAttribute("d") || "",
					i = ra(n);
				return zl(e, i), Nl(t, i, this._defs), i
			}
		},
		d_ = {
			lineargradient: function(t) {
				var e = parseInt(t.getAttribute("x1") || 0, 10),
					n = parseInt(t.getAttribute("y1") || 0, 10),
					i = parseInt(t.getAttribute("x2") || 10, 10),
					r = parseInt(t.getAttribute("y2") || 0, 10),
					a = new ay(e, n, i, r);
				return Bl(t, a), a
			},
			radialgradient: function() {}
		},
		f_ = {
			fill: "fill",
			stroke: "stroke",
			"stroke-width": "lineWidth",
			opacity: "opacity",
			"fill-opacity": "fillOpacity",
			"stroke-opacity": "strokeOpacity",
			"stroke-dasharray": "lineDash",
			"stroke-dashoffset": "lineDashOffset",
			"stroke-linecap": "lineCap",
			"stroke-linejoin": "lineJoin",
			"stroke-miterlimit": "miterLimit",
			"font-family": "fontFamily",
			"font-size": "fontSize",
			"font-style": "fontStyle",
			"font-weight": "fontWeight",
			"text-align": "textAlign",
			"alignment-baseline": "textBaseline"
		},
		p_ = /url\(\s*#(.*?)\)/,
		g_ = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g,
		v_ = /([^\s:;]+)\s*:\s*([^:;]+)/g,
		m_ = N(),
		y_ = {
			registerMap: function(t, e, n) {
				var i;
				return _(e) ? i = e : e.svg ? i = [{
					type: "svg",
					source: e.svg,
					specialAreas: e.specialAreas
				}] : (e.geoJson && !e.features && (n = e.specialAreas, e = e.geoJson), i = [{
					type: "geoJSON",
					source: e,
					specialAreas: n
				}]), f(i, function(t) {
					var e = t.type;
					"geoJson" === e && (e = t.type = "geoJSON");
					var n = x_[e];
					op && O(n, "Illegal map type: " + e), n(t)
				}), m_.set(t, i)
			},
			retrieveMap: function(t) {
				return m_.get(t)
			}
		},
		x_ = {
			geoJSON: function(t) {
				var e = t.source;
				t.geoJSON = b(e) ? "undefined" != typeof JSON && JSON.parse ? JSON.parse(e) : new Function("return (" + e + ");")
					() : e
			},
			svg: function(t) {
				t.svgXML = Ol(t.source)
			}
		},
		__ = O,
		w_ = f,
		b_ = w,
		S_ = S,
		M_ = qy.parseClassType,
		I_ = "4.9.0",
		T_ = {
			zrender: "4.3.2"
		},
		C_ = 1,
		A_ = 1e3,
		D_ = 800,
		k_ = 900,
		P_ = 5e3,
		L_ = 1e3,
		O_ = 1100,
		E_ = 2e3,
		B_ = 3e3,
		z_ = 3500,
		R_ = 4e3,
		N_ = 5e3,
		F_ = {
			PROCESSOR: {
				FILTER: A_,
				SERIES_FILTER: D_,
				STATISTIC: P_
			},
			VISUAL: {
				LAYOUT: L_,
				PROGRESSIVE_LAYOUT: O_,
				GLOBAL: E_,
				CHART: B_,
				POST_CHART_LAYOUT: z_,
				COMPONENT: R_,
				BRUSH: N_
			}
		},
		V_ = "__flagInMainProcess",
		H_ = "__optionUpdated",
		G_ = /^[a-zA-Z0-9_]+$/;
	Xl.prototype.on = Wl("on", !0), Xl.prototype.off = Wl("off", !0), Xl.prototype.one = Wl("one", !0), c(Xl, Lp);
	var W_ = Ul.prototype;
	W_._onframe = function() {
			if (!this._disposed) {
				var t = this._scheduler;
				if (this[H_]) {
					var e = this[H_].silent;
					this[V_] = !0, ql(this), X_.update.call(this), this[V_] = !1, this[H_] = !1, $l.call(this, e), Ql.call(this, e)
				} else if (t.unfinished) {
					var n = C_,
						i = this._model,
						r = this._api;
					t.unfinished = !1;
					do {
						var a = +new Date;
						t.performSeriesTasks(i), t.performDataProcessorTasks(i), Zl(this, i), t.performVisualTasks(i), ru(this, this._model,
							r, "remain"), n -= +new Date - a
					} while (n > 0 && t.unfinished);
					t.unfinished || this._zr.flush()
				}
			}
		}, W_.getDom = function() {
			return this._dom
		}, W_.getZr = function() {
			return this._zr
		}, W_.setOption = function(t, e, n) {
			if (op && __(!this[V_], "`setOption` should not be called during main process."), this._disposed) return void ou(
				this.id);
			var i;
			if (S_(e) && (n = e.lazyUpdate, i = e.silent, e = e.notMerge), this[V_] = !0, !this._model || e) {
				var r = new Ts(this._api),
					a = this._theme,
					o = this._model = new ux;
				o.scheduler = this._scheduler, o.init(null, null, a, r)
			}
			this._model.setOption(t, Z_), n ? (this[H_] = {
				silent: i
			}, this[V_] = !1) : (ql(this), X_.update.call(this), this._zr.flush(), this[H_] = !1, this[V_] = !1, $l.call(this,
				i), Ql.call(this, i))
		}, W_.setTheme = function() {
			console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")
		}, W_.getModel = function() {
			return this._model
		}, W_.getOption = function() {
			return this._model && this._model.getOption()
		}, W_.getWidth = function() {
			return this._zr.getWidth()
		}, W_.getHeight = function() {
			return this._zr.getHeight()
		}, W_.getDevicePixelRatio = function() {
			return this._zr.painter.dpr || window.devicePixelRatio || 1
		}, W_.getRenderedCanvas = function(t) {
			if (hp.canvasSupported) {
				t = t || {}, t.pixelRatio = t.pixelRatio || 1, t.backgroundColor = t.backgroundColor || this._model.get(
					"backgroundColor");
				var e = this._zr;
				return e.painter.getRenderedCanvas(t)
			}
		}, W_.getSvgDataURL = function() {
			if (hp.svgSupported) {
				var t = this._zr,
					e = t.storage.getDisplayList();
				return f(e, function(t) {
					t.stopAnimation(!0)
				}), t.painter.toDataURL()
			}
		}, W_.getDataURL = function(t) {
			if (this._disposed) return void ou(this.id);
			t = t || {};
			var e = t.excludeComponents,
				n = this._model,
				i = [],
				r = this;
			w_(e, function(t) {
				n.eachComponent({
					mainType: t
				}, function(t) {
					var e = r._componentsMap[t.__viewId];
					e.group.ignore || (i.push(e), e.group.ignore = !0)
				})
			});
			var a = "svg" === this._zr.painter.getType() ? this.getSvgDataURL() : this.getRenderedCanvas(t).toDataURL("image/" +
				(t && t.type || "png"));
			return w_(i, function(t) {
				t.group.ignore = !1
			}), a
		}, W_.getConnectedDataURL = function(t) {
			if (this._disposed) return void ou(this.id);
			if (hp.canvasSupported) {
				var e = "svg" === t.type,
					n = this.group,
					r = Math.min,
					a = Math.max,
					o = 1 / 0;
				if (ew[n]) {
					var s = o,
						l = o,
						u = -o,
						h = -o,
						c = [],
						d = t && t.pixelRatio || 1;
					f(tw, function(o) {
						if (o.group === n) {
							var d = e ? o.getZr().painter.getSvgDom().innerHTML : o.getRenderedCanvas(i(t)),
								f = o.getDom().getBoundingClientRect();
							s = r(f.left, s), l = r(f.top, l), u = a(f.right, u), h = a(f.bottom, h), c.push({
								dom: d,
								left: f.left,
								top: f.top
							})
						}
					}), s *= d, l *= d, u *= d, h *= d;
					var p = u - s,
						g = h - l,
						v = wp(),
						m = ji(v, {
							renderer: e ? "svg" : "canvas"
						});
					if (m.resize({
							width: p,
							height: g
						}), e) {
						var y = "";
						return w_(c, function(t) {
								var e = t.left - s,
									n = t.top - l;
								y += '<g transform="translate(' + e + "," + n + ')">' + t.dom + "</g>"
							}), m.painter.getSvgRoot().innerHTML = y, t.connectedBackgroundColor && m.painter.setBackgroundColor(t.connectedBackgroundColor),
							m.refreshImmediately(), m.painter.toDataURL()
					}
					return t.connectedBackgroundColor && m.add(new $m({
						shape: {
							x: 0,
							y: 0,
							width: p,
							height: g
						},
						style: {
							fill: t.connectedBackgroundColor
						}
					})), w_(c, function(t) {
						var e = new Ci({
							style: {
								x: t.left * d - s,
								y: t.top * d - l,
								image: t.dom
							}
						});
						m.add(e)
					}), m.refreshImmediately(), v.toDataURL("image/" + (t && t.type || "png"))
				}
				return this.getDataURL(t)
			}
		}, W_.convertToPixel = x(Yl, "convertToPixel"), W_.convertFromPixel = x(Yl, "convertFromPixel"), W_.containPixel =
		function(t, e) {
			if (this._disposed) return void ou(this.id);
			var n, i = this._model;
			return t = ur(i, t), f(t, function(t, i) {
				i.indexOf("Models") >= 0 && f(t, function(t) {
					var r = t.coordinateSystem;
					if (r && r.containPoint) n |= !!r.containPoint(e);
					else if ("seriesModels" === i) {
						var a = this._chartsMap[t.__viewId];
						a && a.containPoint ? n |= a.containPoint(e, t) : op && console.warn(i + ": " + (a ?
							"The found component do not support containPoint." : "No view mapping to the found component."))
					} else op && console.warn(i + ": containPoint is not supported")
				}, this)
			}, this), !!n
		}, W_.getVisual = function(t, e) {
			var n = this._model;
			t = ur(n, t, {
				defaultMainType: "series"
			});
			var i = t.seriesModel;
			op && (i || console.warn("There is no specified seires model"));
			var r = i.getData(),
				a = t.hasOwnProperty("dataIndexInside") ? t.dataIndexInside : t.hasOwnProperty("dataIndex") ? r.indexOfRawIndex(t.dataIndex) :
				null;
			return null != a ? r.getItemVisual(a, e) : r.getVisual(e)
		}, W_.getViewOfComponentModel = function(t) {
			return this._componentsMap[t.__viewId]
		}, W_.getViewOfSeriesModel = function(t) {
			return this._chartsMap[t.__viewId]
		};
	var X_ = {
		prepareAndUpdate: function(t) {
			ql(this), X_.update.call(this, t)
		},
		update: function(t) {
			var e = this._model,
				n = this._api,
				i = this._zr,
				r = this._coordSysMgr,
				a = this._scheduler;
			if (e) {
				a.restoreData(e, t), a.performSeriesTasks(e), r.create(e, n), a.performDataProcessorTasks(e, t), Zl(this, e), r.update(
					e, n), eu(e), a.performVisualTasks(e, t), nu(this, e, n, t);
				var o = e.get("backgroundColor") || "transparent";
				if (hp.canvasSupported) i.setBackgroundColor(o);
				else {
					var s = Je(o);
					o = un(s, "rgb"), 0 === s[3] && (o = "transparent")
				}
				au(e, n)
			}
		},
		updateTransform: function(t) {
			var e = this._model,
				n = this,
				i = this._api;
			if (e) {
				var r = [];
				e.eachComponent(function(a, o) {
					var s = n.getViewOfComponentModel(o);
					if (s && s.__alive)
						if (s.updateTransform) {
							var l = s.updateTransform(o, e, i, t);
							l && l.update && r.push(s)
						} else r.push(s)
				});
				var a = N();
				e.eachSeries(function(r) {
					var o = n._chartsMap[r.__viewId];
					if (o.updateTransform) {
						var s = o.updateTransform(r, e, i, t);
						s && s.update && a.set(r.uid, 1)
					} else a.set(r.uid, 1)
				}), eu(e), this._scheduler.performVisualTasks(e, t, {
					setDirty: !0,
					dirtyMap: a
				}), ru(n, e, i, t, a), au(e, this._api)
			}
		},
		updateView: function(t) {
			var e = this._model;
			e && (cl.markUpdateMethod(t, "updateView"), eu(e), this._scheduler.performVisualTasks(e, t, {
				setDirty: !0
			}), nu(this, this._model, this._api, t), au(e, this._api))
		},
		updateVisual: function(t) {
			X_.update.call(this, t)
		},
		updateLayout: function(t) {
			X_.update.call(this, t)
		}
	};
	W_.resize = function(t) {
		if (op && __(!this[V_], "`resize` should not be called during main process."), this._disposed) return void ou(this.id);
		this._zr.resize(t);
		var e = this._model;
		if (this._loadingFX && this._loadingFX.resize(), e) {
			var n = e.resetOption("media"),
				i = t && t.silent;
			this[V_] = !0, n && ql(this), X_.update.call(this), this[V_] = !1, $l.call(this, i), Ql.call(this, i)
		}
	}, W_.showLoading = function(t, e) {
		if (this._disposed) return void ou(this.id);
		if (S_(t) && (e = t, t = ""), t = t || "default", this.hideLoading(), !J_[t]) return void(op && console.warn(
			"Loading effects " + t + " not exists."));
		var n = J_[t](this._api, e),
			i = this._zr;
		this._loadingFX = n, i.add(n)
	}, W_.hideLoading = function() {
		return this._disposed ? void ou(this.id) : (this._loadingFX && this._zr.remove(this._loadingFX), void(this._loadingFX =
			null))
	}, W_.makeActionFromEvent = function(t) {
		var e = o({}, t);
		return e.type = q_[t.type], e
	}, W_.dispatchAction = function(t, e) {
		if (this._disposed) return void ou(this.id);
		if (S_(e) || (e = {
				silent: !!e
			}), Y_[t.type] && this._model) {
			if (this[V_]) return void this._pendingActions.push(t);
			Kl.call(this, t, e.silent), e.flush ? this._zr.flush(!0) : e.flush !== !1 && hp.browser.weChat && this._throttledZrFlush(),
				$l.call(this, e.silent), Ql.call(this, e.silent)
		}
	}, W_.appendData = function(t) {
		if (this._disposed) return void ou(this.id);
		var e = t.seriesIndex,
			n = this.getModel(),
			i = n.getSeriesByIndex(e);
		op && __(t.data && i), i.appendData(t), this._scheduler.unfinished = !0
	}, W_.on = Wl("on", !1), W_.off = Wl("off", !1), W_.one = Wl("one", !1);
	var U_ = ["click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout",
		"contextmenu"
	];
	W_._initEvents = function() {
		w_(U_, function(t) {
			var e = function(e) {
				var n, i = this.getModel(),
					r = e.target,
					a = "globalout" === t;
				if (a) n = {};
				else if (r && null != r.dataIndex) {
					var s = r.dataModel || i.getSeriesByIndex(r.seriesIndex);
					n = s && s.getDataParams(r.dataIndex, r.dataType, r) || {}
				} else r && r.eventData && (n = o({}, r.eventData));
				if (n) {
					var l = n.componentType,
						u = n.componentIndex;
					("markLine" === l || "markPoint" === l || "markArea" === l) && (l = "series", u = n.seriesIndex);
					var h = l && null != u && i.getComponent(l, u),
						c = h && this["series" === h.mainType ? "_chartsMap" : "_componentsMap"][h.__viewId];
					op && (a || h && c || console.warn("model or view can not be found by params")), n.event = e, n.type = t,
						this._ecEventProcessor.eventInfo = {
							targetEl: r,
							packedEvent: n,
							model: h,
							view: c
						}, this.trigger(t, n)
				}
			};
			e.zrEventfulCallAtLast = !0, this._zr.on(t, e, this)
		}, this), w_(q_, function(t, e) {
			this._messageCenter.on(e, function(t) {
				this.trigger(e, t)
			}, this)
		}, this)
	}, W_.isDisposed = function() {
		return this._disposed
	}, W_.clear = function() {
		return this._disposed ? void ou(this.id) : void this.setOption({
			series: []
		}, !0)
	}, W_.dispose = function() {
		if (this._disposed) return void ou(this.id);
		this._disposed = !0, cr(this.getDom(), rw, "");
		var t = this._api,
			e = this._model;
		w_(this._componentsViews, function(n) {
			n.dispose(e, t)
		}), w_(this._chartsViews, function(n) {
			n.dispose(e, t)
		}), this._zr.dispose(), delete tw[this.id]
	}, c(Ul, Lp), cu.prototype = {
		constructor: cu,
		normalizeQuery: function(t) {
			var e = {},
				n = {},
				i = {};
			if (b(t)) {
				var r = M_(t);
				e.mainType = r.main || null, e.subType = r.sub || null
			} else {
				var a = ["Index", "Name", "Id"],
					o = {
						name: 1,
						dataIndex: 1,
						dataType: 1
					};
				f(t, function(t, r) {
					for (var s = !1, l = 0; l < a.length; l++) {
						var u = a[l],
							h = r.lastIndexOf(u);
						if (h > 0 && h === r.length - u.length) {
							var c = r.slice(0, h);
							"data" !== c && (e.mainType = c, e[u.toLowerCase()] = t, s = !0)
						}
					}
					o.hasOwnProperty(r) && (n[r] = t, s = !0), s || (i[r] = t)
				})
			}
			return {
				cptQuery: e,
				dataQuery: n,
				otherQuery: i
			}
		},
		filter: function(t, e) {
			function n(t, e, n, i) {
				return null == t[n] || e[i || n] === t[n]
			}
			var i = this.eventInfo;
			if (!i) return !0;
			var r = i.targetEl,
				a = i.packedEvent,
				o = i.model,
				s = i.view;
			if (!o || !s) return !0;
			var l = e.cptQuery,
				u = e.dataQuery;
			return n(l, o, "mainType") && n(l, o, "subType") && n(l, o, "index", "componentIndex") && n(l, o, "name") && n(l,
				o, "id") && n(u, a, "name") && n(u, a, "dataIndex") && n(u, a, "dataType") && (!s.filterForExposedEvent || s.filterForExposedEvent(
				t, e.otherQuery, r, a))
		},
		afterTrigger: function() {
			this.eventInfo = null
		}
	};
	var Y_ = {},
		q_ = {},
		j_ = [],
		Z_ = [],
		K_ = [],
		$_ = [],
		Q_ = {},
		J_ = {},
		tw = {},
		ew = {},
		nw = new Date - 0,
		iw = new Date - 0,
		rw = "_echarts_instance_",
		aw = gu;
	Cu(E_, Yx), _u(Mx), wu(k_, Ix), Du("default", Kx), Su({
		type: "highlight",
		event: "highlight",
		update: "highlight"
	}, V), Su({
		type: "downplay",
		event: "downplay",
		update: "downplay"
	}, V), xu("light", r_), xu("dark", l_);
	var ow = {};
	Nu.prototype = {
		constructor: Nu,
		add: function(t) {
			return this._add = t, this
		},
		update: function(t) {
			return this._update = t, this
		},
		remove: function(t) {
			return this._remove = t, this
		},
		execute: function() {
			var t, e = this._old,
				n = this._new,
				i = {},
				r = {},
				a = [],
				o = [];
			for (Fu(e, i, a, "_oldKeyGetter", this), Fu(n, r, o, "_newKeyGetter", this), t = 0; t < e.length; t++) {
				var s = a[t],
					l = r[s];
				if (null != l) {
					var u = l.length;
					u ? (1 === u && (r[s] = null), l = l.shift()) : r[s] = null, this._update && this._update(l, t)
				} else this._remove && this._remove(t)
			}
			for (var t = 0; t < o.length; t++) {
				var s = o[t];
				if (r.hasOwnProperty(s)) {
					var l = r[s];
					if (null == l) continue;
					if (l.length)
						for (var h = 0, u = l.length; u > h; h++) this._add && this._add(l[h]);
					else this._add && this._add(l)
				}
			}
		}
	};
	var sw = N(["tooltip", "label", "itemName", "itemId", "seriesName"]),
		lw = S,
		uw = "undefined",
		hw = -1,
		cw = "e\x00\x00",
		dw = {
			"float": typeof Float64Array === uw ? Array : Float64Array,
			"int": typeof Int32Array === uw ? Array : Int32Array,
			ordinal: Array,
			number: Array,
			time: Array
		},
		fw = typeof Uint32Array === uw ? Array : Uint32Array,
		pw = typeof Int32Array === uw ? Array : Int32Array,
		gw = typeof Uint16Array === uw ? Array : Uint16Array,
		vw = ["hasItemOption", "_nameList", "_idList", "_invertedIndicesMap", "_rawData", "_chunkSize", "_chunkCount",
			"_dimValueGetter", "_count", "_rawCount", "_nameDimIdx", "_idDimIdx"
		],
		mw = ["_extent", "_approximateExtent", "_rawExtent"],
		yw = function(t, e) {
			t = t || ["x", "y"];
			for (var n = {}, i = [], r = {}, a = 0; a < t.length; a++) {
				var o = t[a];
				b(o) ? o = new Xu({
					name: o
				}) : o instanceof Xu || (o = new Xu(o));
				var s = o.name;
				o.type = o.type || "float", o.coordDim || (o.coordDim = s, o.coordDimIndex = 0), o.otherDims = o.otherDims || {},
					i.push(s), n[s] = o, o.index = a, o.createInvertedIndices && (r[s] = [])
			}
			this.dimensions = i, this._dimensionInfos = n, this.hostModel = e, this.dataType, this._indices = null, this._count =
				0, this._rawCount = 0, this._storage = {}, this._nameList = [], this._idList = [], this._optionModels = [], this._visual = {},
				this._layout = {}, this._itemVisuals = [], this.hasItemVisual = {}, this._itemLayouts = [], this._graphicEls = [],
				this._chunkSize = 1e5, this._chunkCount = 0, this._rawData, this._rawExtent = {}, this._extent = {}, this._approximateExtent = {},
				this._dimensionsSummary = Vu(this), this._invertedIndicesMap = r, this._calculationInfo = {}, this.userOutput =
				this._dimensionsSummary.userOutput
		},
		xw = yw.prototype;
	xw.type = "list", xw.hasItemOption = !0, xw.getDimension = function(t) {
		return ("number" == typeof t || !isNaN(t) && !this._dimensionInfos.hasOwnProperty(t)) && (t = this.dimensions[t]),
			t
	}, xw.getDimensionInfo = function(t) {
		return this._dimensionInfos[this.getDimension(t)]
	}, xw.getDimensionsOnCoord = function() {
		return this._dimensionsSummary.dataDimsOnCoord.slice()
	}, xw.mapDimension = function(t, e) {
		var n = this._dimensionsSummary;
		if (null == e) return n.encodeFirstDimNotExtra[t];
		var i = n.encode[t];
		return e === !0 ? (i || []).slice() : i && i[e]
	}, xw.initData = function(t, e, n) {
		var i = ns.isInstance(t) || d(t);
		if (i && (t = new Xs(t, this.dimensions.length)), op && !i && ("function" != typeof t.getItem || "function" !=
				typeof t.count)) throw new Error("Inavlid data provider.");
		this._rawData = t, this._storage = {}, this._indices = null, this._nameList = e || [], this._idList = [], this._nameRepeatCount = {},
			n || (this.hasItemOption = !1), this.defaultDimValueGetter = Dx[this._rawData.getSource().sourceFormat], this._dimValueGetter =
			n = n || this.defaultDimValueGetter, this._dimValueGetterArrayRows = Dx.arrayRows, this._rawExtent = {}, this._initDataFromProvider(
				0, t.count()), t.pure && (this.hasItemOption = !1)
	}, xw.getProvider = function() {
		return this._rawData
	}, xw.appendData = function(t) {
		op && O(!this._indices, "appendData can only be called on raw data.");
		var e = this._rawData,
			n = this.count();
		e.appendData(t);
		var i = e.count();
		e.persistent || (i += n), this._initDataFromProvider(n, i)
	}, xw.appendValues = function(t, e) {
		for (var n = this._chunkSize, i = this._storage, r = this.dimensions, a = r.length, o = this._rawExtent, s = this.count(),
				l = s + Math.max(t.length, e ? e.length : 0), u = this._chunkCount, h = 0; a > h; h++) {
			var c = r[h];
			o[c] || (o[c] = rh()), i[c] || (i[c] = []), ju(i, this._dimensionInfos[c], n, u, l), this._chunkCount = i[c].length
		}
		for (var d = new Array(a), f = s; l > f; f++) {
			for (var p = f - s, g = Math.floor(f / n), v = f % n, m = 0; a > m; m++) {
				var c = r[m],
					y = this._dimValueGetterArrayRows(t[p] || d, c, p, m);
				i[c][g][v] = y;
				var x = o[c];
				y < x[0] && (x[0] = y), y > x[1] && (x[1] = y)
			}
			e && (this._nameList[f] = e[p])
		}
		this._rawCount = this._count = l, this._extent = {}, Zu(this)
	}, xw._initDataFromProvider = function(t, e) {
		if (!(t >= e)) {
			for (var n, i = this._chunkSize, r = this._rawData, a = this._storage, o = this.dimensions, s = o.length, l = this
					._dimensionInfos, u = this._nameList, h = this._idList, c = this._rawExtent, d = this._nameRepeatCount = {}, f =
					this._chunkCount, p = 0; s > p; p++) {
				var g = o[p];
				c[g] || (c[g] = rh());
				var v = l[g];
				0 === v.otherDims.itemName && (n = this._nameDimIdx = p), 0 === v.otherDims.itemId && (this._idDimIdx = p), a[g] ||
					(a[g] = []), ju(a, v, i, f, e), this._chunkCount = a[g].length
			}
			for (var m = new Array(s), y = t; e > y; y++) {
				m = r.getItem(y, m);
				for (var x = Math.floor(y / i), _ = y % i, w = 0; s > w; w++) {
					var g = o[w],
						b = a[g][x],
						S = this._dimValueGetter(m, g, y, w);
					b[_] = S;
					var M = c[g];
					S < M[0] && (M[0] = S), S > M[1] && (M[1] = S)
				}
				if (!r.pure) {
					var I = u[y];
					if (m && null == I)
						if (null != m.name) u[y] = I = m.name;
						else if (null != n) {
						var T = o[n],
							C = a[T][x];
						if (C) {
							I = C[_];
							var A = l[T].ordinalMeta;
							A && A.categories.length && (I = A.categories[I])
						}
					}
					var D = null == m ? null : m.id;
					null == D && null != I && (d[I] = d[I] || 0, D = I, d[I] > 0 && (D += "__ec__" + d[I]), d[I]++), null != D && (h[
						y] = D)
				}
			}!r.persistent && r.clean && r.clean(), this._rawCount = this._count = e, this._extent = {}, Zu(this)
		}
	}, xw.count = function() {
		return this._count
	}, xw.getIndices = function() {
		var t, e = this._indices;
		if (e) {
			var n = e.constructor,
				i = this._count;
			if (n === Array) {
				t = new n(i);
				for (var r = 0; i > r; r++) t[r] = e[r]
			} else t = new n(e.buffer, 0, i)
		} else
			for (var n = Uu(this), t = new n(this.count()), r = 0; r < t.length; r++) t[r] = r;
		return t
	}, xw.get = function(t, e) {
		if (!(e >= 0 && e < this._count)) return 0 / 0;
		var n = this._storage;
		if (!n[t]) return 0 / 0;
		e = this.getRawIndex(e);
		var i = Math.floor(e / this._chunkSize),
			r = e % this._chunkSize,
			a = n[t][i],
			o = a[r];
		return o
	}, xw.getByRawIndex = function(t, e) {
		if (!(e >= 0 && e < this._rawCount)) return 0 / 0;
		var n = this._storage[t];
		if (!n) return 0 / 0;
		var i = Math.floor(e / this._chunkSize),
			r = e % this._chunkSize,
			a = n[i];
		return a[r]
	}, xw._getFast = function(t, e) {
		var n = Math.floor(e / this._chunkSize),
			i = e % this._chunkSize,
			r = this._storage[t][n];
		return r[i]
	}, xw.getValues = function(t, e) {
		var n = [];
		_(t) || (e = t, t = this.dimensions);
		for (var i = 0, r = t.length; r > i; i++) n.push(this.get(t[i], e));
		return n
	}, xw.hasValue = function(t) {
		for (var e = this._dimensionsSummary.dataDimsOnCoord, n = 0, i = e.length; i > n; n++)
			if (isNaN(this.get(e[n], t))) return !1;
		return !0
	}, xw.getDataExtent = function(t) {
		t = this.getDimension(t);
		var e = this._storage[t],
			n = rh();
		if (!e) return n;
		var i, r = this.count(),
			a = !this._indices;
		if (a) return this._rawExtent[t].slice();
		if (i = this._extent[t]) return i.slice();
		i = n;
		for (var o = i[0], s = i[1], l = 0; r > l; l++) {
			var u = this._getFast(t, this.getRawIndex(l));
			o > u && (o = u), u > s && (s = u)
		}
		return i = [o, s], this._extent[t] = i, i
	}, xw.getApproximateExtent = function(t) {
		return t = this.getDimension(t), this._approximateExtent[t] || this.getDataExtent(t)
	}, xw.setApproximateExtent = function(t, e) {
		e = this.getDimension(e), this._approximateExtent[e] = t.slice()
	}, xw.getCalculationInfo = function(t) {
		return this._calculationInfo[t]
	}, xw.setCalculationInfo = function(t, e) {
		lw(t) ? o(this._calculationInfo, t) : this._calculationInfo[t] = e
	}, xw.getSum = function(t) {
		var e = this._storage[t],
			n = 0;
		if (e)
			for (var i = 0, r = this.count(); r > i; i++) {
				var a = this.get(t, i);
				isNaN(a) || (n += a)
			}
		return n
	}, xw.getMedian = function(t) {
		var e = [];
		this.each(t, function(t) {
			isNaN(t) || e.push(t)
		});
		var n = [].concat(e).sort(function(t, e) {
				return t - e
			}),
			i = this.count();
		return 0 === i ? 0 : i % 2 === 1 ? n[(i - 1) / 2] : (n[i / 2] + n[i / 2 - 1]) / 2
	}, xw.rawIndexOf = function(t, e) {
		var n = t && this._invertedIndicesMap[t];
		if (op && !n) throw new Error("Do not supported yet");
		var i = n[e];
		return null == i || isNaN(i) ? hw : i
	}, xw.indexOfName = function(t) {
		for (var e = 0, n = this.count(); n > e; e++)
			if (this.getName(e) === t) return e;
		return -1
	}, xw.indexOfRawIndex = function(t) {
		if (t >= this._rawCount || 0 > t) return -1;
		if (!this._indices) return t;
		var e = this._indices,
			n = e[t];
		if (null != n && n < this._count && n === t) return t;
		for (var i = 0, r = this._count - 1; r >= i;) {
			var a = (i + r) / 2 | 0;
			if (e[a] < t) i = a + 1;
			else {
				if (!(e[a] > t)) return a;
				r = a - 1
			}
		}
		return -1
	}, xw.indicesOfNearest = function(t, e, n) {
		var i = this._storage,
			r = i[t],
			a = [];
		if (!r) return a;
		null == n && (n = 1 / 0);
		for (var o = 1 / 0, s = -1, l = 0, u = 0, h = this.count(); h > u; u++) {
			var c = e - this.get(t, u),
				d = Math.abs(c);
			n >= d && ((o > d || d === o && c >= 0 && 0 > s) && (o = d, s = c, l = 0), c === s && (a[l++] = u))
		}
		return a.length = l, a
	}, xw.getRawIndex = $u, xw.getRawDataItem = function(t) {
		if (this._rawData.persistent) return this._rawData.getItem(this.getRawIndex(t));
		for (var e = [], n = 0; n < this.dimensions.length; n++) {
			var i = this.dimensions[n];
			e.push(this.get(i, t))
		}
		return e
	}, xw.getName = function(t) {
		var e = this.getRawIndex(t);
		return this._nameList[e] || Ku(this, this._nameDimIdx, e) || ""
	}, xw.getId = function(t) {
		return Ju(this, this.getRawIndex(t))
	}, xw.each = function(t, e, n, i) {
		if (this._count) {
			"function" == typeof t && (i = n, n = e, e = t, t = []), n = n || i || this, t = p(th(t), this.getDimension, this),
				op && eh(this, t);
			for (var r = t.length, a = 0; a < this.count(); a++) switch (r) {
				case 0:
					e.call(n, a);
					break;
				case 1:
					e.call(n, this.get(t[0], a), a);
					break;
				case 2:
					e.call(n, this.get(t[0], a), this.get(t[1], a), a);
					break;
				default:
					for (var o = 0, s = []; r > o; o++) s[o] = this.get(t[o], a);
					s[o] = a, e.apply(n, s)
			}
		}
	}, xw.filterSelf = function(t, e, n, i) {
		if (this._count) {
			"function" == typeof t && (i = n, n = e, e = t, t = []), n = n || i || this, t = p(th(t), this.getDimension, this),
				op && eh(this, t);
			for (var r = this.count(), a = Uu(this), o = new a(r), s = [], l = t.length, u = 0, h = t[0], c = 0; r > c; c++) {
				var d, f = this.getRawIndex(c);
				if (0 === l) d = e.call(n, c);
				else if (1 === l) {
					var g = this._getFast(h, f);
					d = e.call(n, g, c)
				} else {
					for (var v = 0; l > v; v++) s[v] = this._getFast(h, f);
					s[v] = c, d = e.apply(n, s)
				}
				d && (o[u++] = f)
			}
			return r > u && (this._indices = o), this._count = u, this._extent = {}, this.getRawIndex = this._indices ? Qu :
				$u, this
		}
	}, xw.selectRange = function(t) {
		if (this._count) {
			var e = [];
			for (var n in t) t.hasOwnProperty(n) && e.push(n);
			op && eh(this, e);
			var i = e.length;
			if (i) {
				var r = this.count(),
					a = Uu(this),
					o = new a(r),
					s = 0,
					l = e[0],
					u = t[l][0],
					h = t[l][1],
					c = !1;
				if (!this._indices) {
					var d = 0;
					if (1 === i) {
						for (var f = this._storage[e[0]], p = 0; p < this._chunkCount; p++)
							for (var g = f[p], v = Math.min(this._count - p * this._chunkSize, this._chunkSize), m = 0; v > m; m++) {
								var y = g[m];
								(y >= u && h >= y || isNaN(y)) && (o[s++] = d), d++
							}
						c = !0
					} else if (2 === i) {
						for (var f = this._storage[l], x = this._storage[e[1]], _ = t[e[1]][0], w = t[e[1]][1], p = 0; p < this._chunkCount; p++)
							for (var g = f[p], b = x[p], v = Math.min(this._count - p * this._chunkSize, this._chunkSize), m = 0; v > m; m++) {
								var y = g[m],
									S = b[m];
								(y >= u && h >= y || isNaN(y)) && (S >= _ && w >= S || isNaN(S)) && (o[s++] = d), d++
							}
						c = !0
					}
				}
				if (!c)
					if (1 === i)
						for (var m = 0; r > m; m++) {
							var M = this.getRawIndex(m),
								y = this._getFast(l, M);
							(y >= u && h >= y || isNaN(y)) && (o[s++] = M)
						} else
							for (var m = 0; r > m; m++) {
								for (var I = !0, M = this.getRawIndex(m), p = 0; i > p; p++) {
									var T = e[p],
										y = this._getFast(n, M);
									(y < t[T][0] || y > t[T][1]) && (I = !1)
								}
								I && (o[s++] = this.getRawIndex(m))
							}
				return r > s && (this._indices = o), this._count = s, this._extent = {}, this.getRawIndex = this._indices ? Qu :
					$u, this
			}
		}
	}, xw.mapArray = function(t, e, n, i) {
		"function" == typeof t && (i = n, n = e, e = t, t = []), n = n || i || this;
		var r = [];
		return this.each(t, function() {
			r.push(e && e.apply(this, arguments))
		}, n), r
	}, xw.map = function(t, e, n, i) {
		n = n || i || this, t = p(th(t), this.getDimension, this), op && eh(this, t);
		var r = nh(this, t);
		r._indices = this._indices, r.getRawIndex = r._indices ? Qu : $u;
		for (var a = r._storage, o = [], s = this._chunkSize, l = t.length, u = this.count(), h = [], c = r._rawExtent, d =
				0; u > d; d++) {
			for (var f = 0; l > f; f++) h[f] = this.get(t[f], d);
			h[l] = d;
			var g = e && e.apply(n, h);
			if (null != g) {
				"object" != typeof g && (o[0] = g, g = o);
				for (var v = this.getRawIndex(d), m = Math.floor(v / s), y = v % s, x = 0; x < g.length; x++) {
					var _ = t[x],
						w = g[x],
						b = c[_],
						S = a[_];
					S && (S[m][y] = w), w < b[0] && (b[0] = w), w > b[1] && (b[1] = w)
				}
			}
		}
		return r
	}, xw.downSample = function(t, e, n, i) {
		for (var r = nh(this, [t]), a = r._storage, o = [], s = Math.floor(1 / e), l = a[t], u = this.count(), h = this._chunkSize,
				c = r._rawExtent[t], d = new(Uu(this))(u), f = 0, p = 0; u > p; p += s) {
			s > u - p && (s = u - p, o.length = s);
			for (var g = 0; s > g; g++) {
				var v = this.getRawIndex(p + g),
					m = Math.floor(v / h),
					y = v % h;
				o[g] = l[m][y]
			}
			var x = n(o),
				_ = this.getRawIndex(Math.min(p + i(o, x) || 0, u - 1)),
				w = Math.floor(_ / h),
				b = _ % h;
			l[w][b] = x, x < c[0] && (c[0] = x), x > c[1] && (c[1] = x), d[f++] = _
		}
		return r._count = f, r._indices = d, r.getRawIndex = Qu, r
	}, xw.getItemModel = function(t) {
		var e = this.hostModel;
		return new fo(this.getRawDataItem(t), e, e && e.ecModel)
	}, xw.diff = function(t) {
		var e = this;
		return new Nu(t ? t.getIndices() : [], this.getIndices(), function(e) {
			return Ju(t, e)
		}, function(t) {
			return Ju(e, t)
		})
	}, xw.getVisual = function(t) {
		var e = this._visual;
		return e && e[t]
	}, xw.setVisual = function(t, e) {
		if (lw(t))
			for (var n in t) t.hasOwnProperty(n) && this.setVisual(n, t[n]);
		else this._visual = this._visual || {}, this._visual[t] = e
	}, xw.setLayout = function(t, e) {
		if (lw(t))
			for (var n in t) t.hasOwnProperty(n) && this.setLayout(n, t[n]);
		else this._layout[t] = e
	}, xw.getLayout = function(t) {
		return this._layout[t]
	}, xw.getItemLayout = function(t) {
		return this._itemLayouts[t]
	}, xw.setItemLayout = function(t, e, n) {
		this._itemLayouts[t] = n ? o(this._itemLayouts[t] || {}, e) : e
	}, xw.clearItemLayouts = function() {
		this._itemLayouts.length = 0
	}, xw.getItemVisual = function(t, e, n) {
		var i = this._itemVisuals[t],
			r = i && i[e];
		return null != r || n ? r : this.getVisual(e)
	}, xw.setItemVisual = function(t, e, n) {
		var i = this._itemVisuals[t] || {},
			r = this.hasItemVisual;
		if (this._itemVisuals[t] = i, lw(e))
			for (var a in e) e.hasOwnProperty(a) && (i[a] = e[a], r[a] = !0);
		else i[e] = n, r[e] = !0
	}, xw.clearAllVisual = function() {
		this._visual = {}, this._itemVisuals = [], this.hasItemVisual = {}
	};
	var _w = function(t) {
		t.seriesIndex = this.seriesIndex, t.dataIndex = this.dataIndex, t.dataType = this.dataType
	};
	xw.setItemGraphicEl = function(t, e) {
		var n = this.hostModel;
		e && (e.dataIndex = t, e.dataType = this.dataType, e.seriesIndex = n && n.seriesIndex, "group" === e.type && e.traverse(
			_w, e)), this._graphicEls[t] = e
	}, xw.getItemGraphicEl = function(t) {
		return this._graphicEls[t]
	}, xw.eachItemGraphicEl = function(t, e) {
		f(this._graphicEls, function(n, i) {
			n && t && t.call(e, n, i)
		})
	}, xw.cloneShallow = function(t) {
		if (!t) {
			var e = p(this.dimensions, this.getDimensionInfo, this);
			t = new yw(e, this.hostModel)
		}
		if (t._storage = this._storage, qu(t, this), this._indices) {
			var n = this._indices.constructor;
			t._indices = new n(this._indices)
		} else t._indices = null;
		return t.getRawIndex = t._indices ? Qu : $u, t
	}, xw.wrapMethod = function(t, e) {
		var n = this[t];
		"function" == typeof n && (this.__wrappedMethods = this.__wrappedMethods || [], this.__wrappedMethods.push(t), this[
			t] = function() {
			var t = n.apply(this, arguments);
			return e.apply(this, [t].concat(P(arguments)))
		})
	}, xw.TRANSFERABLE_METHODS = ["cloneShallow", "downSample", "map"], xw.CHANGABLE_METHODS = ["filterSelf",
		"selectRange"
	];
	var ww = function(t, e) {
			return e = e || {}, ah(e.coordDimensions || [], t, {
				dimsDef: e.dimensionsDefine || t.dimensionsDefine,
				encodeDef: e.encodeDefine || t.encodeDefine,
				dimCount: e.dimensionsCount,
				encodeDefaulter: e.encodeDefaulter,
				generateCoord: e.generateCoord,
				generateCoordCount: e.generateCoordCount
			})
		},
		bw = {
			cartesian2d: function(t, e, n, i) {
				var r = t.getReferringComponents("xAxis")[0],
					a = t.getReferringComponents("yAxis")[0];
				if (op) {
					if (!r) throw new Error('xAxis "' + A(t.get("xAxisIndex"), t.get("xAxisId"), 0) + '" not found');
					if (!a) throw new Error('yAxis "' + A(t.get("xAxisIndex"), t.get("yAxisId"), 0) + '" not found')
				}
				e.coordSysDims = ["x", "y"], n.set("x", r), n.set("y", a), hh(r) && (i.set("x", r), e.firstCategoryDimIndex = 0),
					hh(a) && (i.set("y", a), null == e.firstCategoryDimIndex & (e.firstCategoryDimIndex = 1))
			},
			singleAxis: function(t, e, n, i) {
				var r = t.getReferringComponents("singleAxis")[0];
				if (op && !r) throw new Error("singleAxis should be specified.");
				e.coordSysDims = ["single"], n.set("single", r), hh(r) && (i.set("single", r), e.firstCategoryDimIndex = 0)
			},
			polar: function(t, e, n, i) {
				var r = t.getReferringComponents("polar")[0],
					a = r.findAxisModel("radiusAxis"),
					o = r.findAxisModel("angleAxis");
				if (op) {
					if (!o) throw new Error("angleAxis option not found");
					if (!a) throw new Error("radiusAxis option not found")
				}
				e.coordSysDims = ["radius", "angle"], n.set("radius", a), n.set("angle", o), hh(a) && (i.set("radius", a), e.firstCategoryDimIndex =
					0), hh(o) && (i.set("angle", o), null == e.firstCategoryDimIndex && (e.firstCategoryDimIndex = 1))
			},
			geo: function(t, e) {
				e.coordSysDims = ["lng", "lat"]
			},
			parallel: function(t, e, n, i) {
				var r = t.ecModel,
					a = r.getComponent("parallel", t.get("parallelIndex")),
					o = e.coordSysDims = a.dimensions.slice();
				f(a.parallelAxisIndex, function(t, a) {
					var s = r.getComponent("parallelAxis", t),
						l = o[a];
					n.set(l, s), hh(s) && null == e.firstCategoryDimIndex && (i.set(l, s), e.firstCategoryDimIndex = a)
				})
			}
		};
	mh.prototype.parse = function(t) {
		return t
	}, mh.prototype.getSetting = function(t) {
		return this._setting[t]
	}, mh.prototype.contain = function(t) {
		var e = this._extent;
		return t >= e[0] && t <= e[1]
	}, mh.prototype.normalize = function(t) {
		var e = this._extent;
		return e[1] === e[0] ? .5 : (t - e[0]) / (e[1] - e[0])
	}, mh.prototype.scale = function(t) {
		var e = this._extent;
		return t * (e[1] - e[0]) + e[0]
	}, mh.prototype.unionExtent = function(t) {
		var e = this._extent;
		t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1])
	}, mh.prototype.unionExtentFromData = function(t, e) {
		this.unionExtent(t.getApproximateExtent(e))
	}, mh.prototype.getExtent = function() {
		return this._extent.slice()
	}, mh.prototype.setExtent = function(t, e) {
		var n = this._extent;
		isNaN(t) || (n[0] = t), isNaN(e) || (n[1] = e)
	}, mh.prototype.isBlank = function() {
		return this._isBlank
	}, mh.prototype.setBlank = function(t) {
		this._isBlank = t
	}, mh.prototype.getLabel = null, vr(mh), _r(mh, {
		registerWhenExtend: !0
	}), yh.createByAxisModel = function(t) {
		var e = t.option,
			n = e.data,
			i = n && p(n, _h);
		return new yh({
			categories: i,
			needCollect: !i,
			deduplication: e.dedplication !== !1
		})
	};
	var Sw = yh.prototype;
	Sw.getOrdinal = function(t) {
		return xh(this).get(t)
	}, Sw.parseAndCollect = function(t) {
		var e, n = this._needCollect;
		if ("string" != typeof t && !n) return t;
		if (n && !this._deduplication) return e = this.categories.length, this.categories[e] = t, e;
		var i = xh(this);
		return e = i.get(t), null == e && (n ? (e = this.categories.length, this.categories[e] = t, i.set(t, e)) : e = 0 /
			0), e
	};
	var Mw = mh.prototype,
		Iw = mh.extend({
			type: "ordinal",
			init: function(t, e) {
				(!t || _(t)) && (t = new yh({
					categories: t
				})), this._ordinalMeta = t, this._extent = e || [0, t.categories.length - 1]
			},
			parse: function(t) {
				return "string" == typeof t ? this._ordinalMeta.getOrdinal(t) : Math.round(t)
			},
			contain: function(t) {
				return t = this.parse(t), Mw.contain.call(this, t) && null != this._ordinalMeta.categories[t]
			},
			normalize: function(t) {
				return Mw.normalize.call(this, this.parse(t))
			},
			scale: function(t) {
				return Math.round(Mw.scale.call(this, t))
			},
			getTicks: function() {
				for (var t = [], e = this._extent, n = e[0]; n <= e[1];) t.push(n), n++;
				return t
			},
			getLabel: function(t) {
				return this.isBlank() ? void 0 : this._ordinalMeta.categories[t]
			},
			count: function() {
				return this._extent[1] - this._extent[0] + 1
			},
			unionExtentFromData: function(t, e) {
				this.unionExtent(t.getApproximateExtent(e))
			},
			getOrdinalMeta: function() {
				return this._ordinalMeta
			},
			niceTicks: V,
			niceExtent: V
		});
	Iw.create = function() {
		return new Iw
	};
	var Tw = bo,
		Cw = bo,
		Aw = mh.extend({
			type: "interval",
			_interval: 0,
			_intervalPrecision: 2,
			setExtent: function(t, e) {
				var n = this._extent;
				isNaN(t) || (n[0] = parseFloat(t)), isNaN(e) || (n[1] = parseFloat(e))
			},
			unionExtent: function(t) {
				var e = this._extent;
				t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1]), Aw.prototype.setExtent.call(this, e[0], e[1])
			},
			getInterval: function() {
				return this._interval
			},
			setInterval: function(t) {
				this._interval = t, this._niceExtent = this._extent.slice(), this._intervalPrecision = bh(t)
			},
			getTicks: function(t) {
				var e = this._interval,
					n = this._extent,
					i = this._niceExtent,
					r = this._intervalPrecision,
					a = [];
				if (!e) return a;
				var o = 1e4;
				n[0] < i[0] && a.push(t ? Cw(i[0] - e, r) : n[0]);
				for (var s = i[0]; s <= i[1] && (a.push(s), s = Cw(s + e, r), s !== a[a.length - 1]);)
					if (a.length > o) return [];
				var l = a.length ? a[a.length - 1] : i[1];
				return n[1] > l && a.push(t ? Cw(l + e, r) : n[1]), a
			},
			getMinorTicks: function(t) {
				for (var e = this.getTicks(!0), n = [], i = this.getExtent(), r = 1; r < e.length; r++) {
					for (var a = e[r], o = e[r - 1], s = 0, l = [], u = a - o, h = u / t; t - 1 > s;) {
						var c = bo(o + (s + 1) * h);
						c > i[0] && c < i[1] && l.push(c), s++
					}
					n.push(l)
				}
				return n
			},
			getLabel: function(t, e) {
				if (null == t) return "";
				var n = e && e.precision;
				return null == n ? n = Io(t) || 0 : "auto" === n && (n = this._intervalPrecision), t = Cw(t, n, !0), Ro(t)
			},
			niceTicks: function(t, e, n) {
				t = t || 5;
				var i = this._extent,
					r = i[1] - i[0];
				if (isFinite(r)) {
					0 > r && (r = -r, i.reverse());
					var a = wh(i, t, e, n);
					this._intervalPrecision = a.intervalPrecision, this._interval = a.interval, this._niceExtent = a.niceTickExtent
				}
			},
			niceExtent: function(t) {
				var e = this._extent;
				if (e[0] === e[1])
					if (0 !== e[0]) {
						var n = e[0];
						t.fixMax ? e[0] -= n / 2 : (e[1] += n / 2, e[0] -= n / 2)
					} else e[1] = 1;
				var i = e[1] - e[0];
				isFinite(i) || (e[0] = 0, e[1] = 1), this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval);
				var r = this._interval;
				t.fixMin || (e[0] = Cw(Math.floor(e[0] / r) * r)), t.fixMax || (e[1] = Cw(Math.ceil(e[1] / r) * r))
			}
		});
	Aw.create = function() {
		return new Aw
	};
	var Dw = "__ec_stack_",
		kw = .5,
		Pw = "undefined" != typeof Float32Array ? Float32Array : Array,
		Lw = {
			seriesType: "bar",
			plan: Nx(),
			reset: function(t) {
				function e(t, e) {
					for (var n, d = t.count, f = new Pw(2 * d), p = new Pw(2 * d), g = new Pw(d), v = [], m = [], y = 0, x = 0; null !=
						(n = t.next());) m[h] = e.get(s, n), m[1 - h] = e.get(l, n), v = i.dataToPoint(m, null, v), p[y] = u ? r.x + r.width :
						v[0], f[y++] = v[0], p[y] = u ? v[1] : r.y + r.height, f[y++] = v[1], g[x++] = n;
					e.setLayout({
						largePoints: f,
						largeDataIndices: g,
						largeBackgroundPoints: p,
						barWidth: c,
						valueAxisStart: Bh(a, o, !1),
						backgroundStart: u ? r.x : r.y,
						valueAxisHorizontal: u
					})
				}
				if (Oh(t) && Eh(t)) {
					var n = t.getData(),
						i = t.coordinateSystem,
						r = i.grid.getRect(),
						a = i.getBaseAxis(),
						o = i.getOtherAxis(a),
						s = n.mapDimension(o.dim),
						l = n.mapDimension(a.dim),
						u = o.isHorizontal(),
						h = u ? 0 : 1,
						c = Ph(Dh([t]), a, t).width;
					return c > kw || (c = kw), {
						progress: e
					}
				}
			}
		},
		Ow = Aw.prototype,
		Ew = Math.ceil,
		Bw = Math.floor,
		zw = 1e3,
		Rw = 60 * zw,
		Nw = 60 * Rw,
		Fw = 24 * Nw,
		Vw = function(t, e, n, i) {
			for (; i > n;) {
				var r = n + i >>> 1;
				t[r][1] < e ? n = r + 1 : i = r
			}
			return n
		},
		Hw = Aw.extend({
			type: "time",
			getLabel: function(t) {
				var e = this._stepLvl,
					n = new Date(t);
				return Xo(e[0], n, this.getSetting("useUTC"))
			},
			niceExtent: function(t) {
				var e = this._extent;
				if (e[0] === e[1] && (e[0] -= Fw, e[1] += Fw), e[1] === -1 / 0 && 1 / 0 === e[0]) {
					var n = new Date;
					e[1] = +new Date(n.getFullYear(), n.getMonth(), n.getDate()), e[0] = e[1] - Fw
				}
				this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval);
				var i = this._interval;
				t.fixMin || (e[0] = bo(Bw(e[0] / i) * i)), t.fixMax || (e[1] = bo(Ew(e[1] / i) * i))
			},
			niceTicks: function(t, e, n) {
				t = t || 10;
				var i = this._extent,
					r = i[1] - i[0],
					a = r / t;
				null != e && e > a && (a = e), null != n && a > n && (a = n);
				var o = Gw.length,
					s = Vw(Gw, a, 0, o),
					l = Gw[Math.min(s, o - 1)],
					u = l[1];
				if ("year" === l[0]) {
					var h = r / u,
						c = Oo(h / t, !0);
					u *= c
				}
				var d = this.getSetting("useUTC") ? 0 : 60 * new Date(+i[0] || +i[1]).getTimezoneOffset() * 1e3,
					f = [Math.round(Ew((i[0] - d) / u) * u + d), Math.round(Bw((i[1] - d) / u) * u + d)];
				Mh(f, i), this._stepLvl = l, this._interval = u, this._niceExtent = f
			},
			parse: function(t) {
				return +ko(t)
			}
		});
	f(["contain", "normalize"], function(t) {
		Hw.prototype[t] = function(e) {
			return Ow[t].call(this, this.parse(e))
		}
	});
	var Gw = [
		["hh:mm:ss", zw],
		["hh:mm:ss", 5 * zw],
		["hh:mm:ss", 10 * zw],
		["hh:mm:ss", 15 * zw],
		["hh:mm:ss", 30 * zw],
		["hh:mm\nMM-dd", Rw],
		["hh:mm\nMM-dd", 5 * Rw],
		["hh:mm\nMM-dd", 10 * Rw],
		["hh:mm\nMM-dd", 15 * Rw],
		["hh:mm\nMM-dd", 30 * Rw],
		["hh:mm\nMM-dd", Nw],
		["hh:mm\nMM-dd", 2 * Nw],
		["hh:mm\nMM-dd", 6 * Nw],
		["hh:mm\nMM-dd", 12 * Nw],
		["MM-dd\nyyyy", Fw],
		["MM-dd\nyyyy", 2 * Fw],
		["MM-dd\nyyyy", 3 * Fw],
		["MM-dd\nyyyy", 4 * Fw],
		["MM-dd\nyyyy", 5 * Fw],
		["MM-dd\nyyyy", 6 * Fw],
		["week", 7 * Fw],
		["MM-dd\nyyyy", 10 * Fw],
		["week", 14 * Fw],
		["week", 21 * Fw],
		["month", 31 * Fw],
		["week", 42 * Fw],
		["month", 62 * Fw],
		["week", 70 * Fw],
		["quarter", 95 * Fw],
		["month", 31 * Fw * 4],
		["month", 31 * Fw * 5],
		["half-year", 380 * Fw / 2],
		["month", 31 * Fw * 8],
		["month", 31 * Fw * 10],
		["year", 380 * Fw]
	];
	Hw.create = function(t) {
		return new Hw({
			useUTC: t.ecModel.get("useUTC")
		})
	};
	var Ww = mh.prototype,
		Xw = Aw.prototype,
		Uw = Io,
		Yw = bo,
		qw = Math.floor,
		jw = Math.ceil,
		Zw = Math.pow,
		Kw = Math.log,
		$w = mh.extend({
			type: "log",
			base: 10,
			$constructor: function() {
				mh.apply(this, arguments), this._originalScale = new Aw
			},
			getTicks: function(t) {
				var e = this._originalScale,
					n = this._extent,
					i = e.getExtent();
				return p(Xw.getTicks.call(this, t), function(t) {
					var r = bo(Zw(this.base, t));
					return r = t === n[0] && e.__fixMin ? zh(r, i[0]) : r, r = t === n[1] && e.__fixMax ? zh(r, i[1]) : r
				}, this)
			},
			getMinorTicks: Xw.getMinorTicks,
			getLabel: Xw.getLabel,
			scale: function(t) {
				return t = Ww.scale.call(this, t), Zw(this.base, t)
			},
			setExtent: function(t, e) {
				var n = this.base;
				t = Kw(t) / Kw(n), e = Kw(e) / Kw(n), Xw.setExtent.call(this, t, e)
			},
			getExtent: function() {
				var t = this.base,
					e = Ww.getExtent.call(this);
				e[0] = Zw(t, e[0]), e[1] = Zw(t, e[1]);
				var n = this._originalScale,
					i = n.getExtent();
				return n.__fixMin && (e[0] = zh(e[0], i[0])), n.__fixMax && (e[1] = zh(e[1], i[1])), e
			},
			unionExtent: function(t) {
				this._originalScale.unionExtent(t);
				var e = this.base;
				t[0] = Kw(t[0]) / Kw(e), t[1] = Kw(t[1]) / Kw(e), Ww.unionExtent.call(this, t)
			},
			unionExtentFromData: function(t, e) {
				this.unionExtent(t.getApproximateExtent(e))
			},
			niceTicks: function(t) {
				t = t || 10;
				var e = this._extent,
					n = e[1] - e[0];
				if (!(1 / 0 === n || 0 >= n)) {
					var i = Po(n),
						r = t / n * i;
					for (.5 >= r && (i *= 10); !isNaN(i) && Math.abs(i) < 1 && Math.abs(i) > 0;) i *= 10;
					var a = [bo(jw(e[0] / i) * i), bo(qw(e[1] / i) * i)];
					this._interval = i, this._niceExtent = a
				}
			},
			niceExtent: function(t) {
				Xw.niceExtent.call(this, t);
				var e = this._originalScale;
				e.__fixMin = t.fixMin, e.__fixMax = t.fixMax
			}
		});
	f(["contain", "normalize"], function(t) {
		$w.prototype[t] = function(e) {
			return e = Kw(e) / Kw(this.base), Ww[t].call(this, e)
		}
	}), $w.create = function() {
		return new $w
	};
	var Qw = {
			getMin: function(t) {
				var e = this.option,
					n = t || null == e.rangeStart ? e.min : e.rangeStart;
				return this.axis && null != n && "dataMin" !== n && "function" != typeof n && !C(n) && (n = this.axis.scale.parse(
					n)), n
			},
			getMax: function(t) {
				var e = this.option,
					n = t || null == e.rangeEnd ? e.max : e.rangeEnd;
				return this.axis && null != n && "dataMax" !== n && "function" != typeof n && !C(n) && (n = this.axis.scale.parse(
					n)), n
			},
			getNeedCrossZero: function() {
				var t = this.option;
				return null != t.rangeStart || null != t.rangeEnd ? !1 : !t.scale
			},
			getCoordSysModel: V,
			setRange: function(t, e) {
				this.option.rangeStart = t, this.option.rangeEnd = e
			},
			resetRange: function() {
				this.option.rangeStart = this.option.rangeEnd = null
			}
		},
		Jw = pa({
			type: "triangle",
			shape: {
				cx: 0,
				cy: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var n = e.cx,
					i = e.cy,
					r = e.width / 2,
					a = e.height / 2;
				t.moveTo(n, i - a), t.lineTo(n + r, i + a), t.lineTo(n - r, i + a), t.closePath()
			}
		}),
		tb = pa({
			type: "diamond",
			shape: {
				cx: 0,
				cy: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var n = e.cx,
					i = e.cy,
					r = e.width / 2,
					a = e.height / 2;
				t.moveTo(n, i - a), t.lineTo(n + r, i), t.lineTo(n, i + a), t.lineTo(n - r, i), t.closePath()
			}
		}),
		eb = pa({
			type: "pin",
			shape: {
				x: 0,
				y: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var n = e.x,
					i = e.y,
					r = e.width / 5 * 3,
					a = Math.max(r, e.height),
					o = r / 2,
					s = o * o / (a - o),
					l = i - a + o + s,
					u = Math.asin(s / o),
					h = Math.cos(u) * o,
					c = Math.sin(u),
					d = Math.cos(u),
					f = .6 * o,
					p = .7 * o;
				t.moveTo(n - h, l + s), t.arc(n, l, o, Math.PI - u, 2 * Math.PI + u), t.bezierCurveTo(n + h - c * f, l + s + d *
					f, n, i - p, n, i), t.bezierCurveTo(n, i - p, n - h + c * f, l + s + d * f, n - h, l + s), t.closePath()
			}
		}),
		nb = pa({
			type: "arrow",
			shape: {
				x: 0,
				y: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var n = e.height,
					i = e.width,
					r = e.x,
					a = e.y,
					o = i / 3 * 2;
				t.moveTo(r, a), t.lineTo(r + o, a + n), t.lineTo(r, a + n / 4 * 3), t.lineTo(r - o, a + n), t.lineTo(r, a), t.closePath()
			}
		}),
		ib = {
			line: Jm,
			rect: $m,
			roundRect: $m,
			square: $m,
			circle: Vm,
			diamond: tb,
			pin: eb,
			arrow: nb,
			triangle: Jw
		},
		rb = {
			line: function(t, e, n, i, r) {
				r.x1 = t, r.y1 = e + i / 2, r.x2 = t + n, r.y2 = e + i / 2
			},
			rect: function(t, e, n, i, r) {
				r.x = t, r.y = e, r.width = n, r.height = i
			},
			roundRect: function(t, e, n, i, r) {
				r.x = t, r.y = e, r.width = n, r.height = i, r.r = Math.min(n, i) / 4
			},
			square: function(t, e, n, i, r) {
				var a = Math.min(n, i);
				r.x = t, r.y = e, r.width = a, r.height = a
			},
			circle: function(t, e, n, i, r) {
				r.cx = t + n / 2, r.cy = e + i / 2, r.r = Math.min(n, i) / 2
			},
			diamond: function(t, e, n, i, r) {
				r.cx = t + n / 2, r.cy = e + i / 2, r.width = n, r.height = i
			},
			pin: function(t, e, n, i, r) {
				r.x = t + n / 2, r.y = e + i / 2, r.width = n, r.height = i
			},
			arrow: function(t, e, n, i, r) {
				r.x = t + n / 2, r.y = e + i / 2, r.width = n, r.height = i
			},
			triangle: function(t, e, n, i, r) {
				r.cx = t + n / 2, r.cy = e + i / 2, r.width = n, r.height = i
			}
		},
		ab = {};
	f(ib, function(t, e) {
		ab[e] = new t
	});
	var ob = pa({
			type: "symbol",
			shape: {
				symbolType: "",
				x: 0,
				y: 0,
				width: 0,
				height: 0
			},
			calculateTextPosition: function(t, e, n) {
				var i = Kn(t, e, n),
					r = this.shape;
				return r && "pin" === r.symbolType && "inside" === e.textPosition && (i.y = n.y + .4 * n.height), i
			},
			buildPath: function(t, e, n) {
				var i = e.symbolType;
				if ("none" !== i) {
					var r = ab[i];
					r || (i = "rect", r = ab[i]), rb[i](e.x, e.y, e.width, e.height, r.shape), r.buildPath(t, r.shape, n)
				}
			}
		}),
		sb = {
			isDimensionStacked: dh,
			enableDataStack: ch,
			getStackedDimension: fh
		},
		lb = (Object.freeze || Object)({
			createList: Kh,
			getLayoutRect: Ko,
			dataStack: sb,
			createScale: $h,
			mixinAxisModelCommonMethods: Qh,
			completeDimensions: ah,
			createDimensions: ww,
			createSymbol: Zh
		}),
		ub = 1e-8;
	ec.prototype = {
		constructor: ec,
		properties: null,
		getBoundingRect: function() {
			var t = this._rect;
			if (t) return t;
			for (var e = Number.MAX_VALUE, n = [e, e], i = [-e, -e], r = [], a = [], o = this.geometries, s = 0; s < o.length; s++)
				if ("polygon" === o[s].type) {
					var l = o[s].exterior;
					Br(l, r, a), oe(n, n, r), se(i, i, a)
				} return 0 === s && (n[0] = n[1] = i[0] = i[1] = 0), this._rect = new Tn(n[0], n[1], i[0] - n[0], i[1] - n[1])
		},
		contain: function(t) {
			var e = this.getBoundingRect(),
				n = this.geometries;
			if (!e.contain(t[0], t[1])) return !1;
			t: for (var i = 0, r = n.length; r > i; i++)
				if ("polygon" === n[i].type) {
					var a = n[i].exterior,
						o = n[i].interiors;
					if (tc(a, t[0], t[1])) {
						for (var s = 0; s < (o ? o.length : 0); s++)
							if (tc(o[s])) continue t;
						return !0
					}
				}
			return !1
		},
		transformTo: function(t, e, n, i) {
			var r = this.getBoundingRect(),
				a = r.width / r.height;
			n ? i || (i = n / a) : n = a * i;
			for (var o = new Tn(t, e, n, i), s = r.calculateTransform(o), l = this.geometries, u = 0; u < l.length; u++)
				if ("polygon" === l[u].type) {
					for (var h = l[u].exterior, c = l[u].interiors, d = 0; d < h.length; d++) ae(h[d], h[d], s);
					for (var f = 0; f < (c ? c.length : 0); f++)
						for (var d = 0; d < c[f].length; d++) ae(c[f][d], c[f][d], s)
				} r = this._rect, r.copy(o), this.center = [r.x + r.width / 2, r.y + r.height / 2]
		},
		cloneShallow: function(t) {
			null == t && (t = this.name);
			var e = new ec(t, this.geometries, this.center);
			return e._rect = this._rect, e.transformTo = null, e
		}
	};
	var hb = function(t, e) {
			return nc(t), p(v(t.features, function(t) {
				return t.geometry && t.properties && t.geometry.coordinates.length > 0
			}), function(t) {
				var n = t.properties,
					i = t.geometry,
					r = i.coordinates,
					a = [];
				"Polygon" === i.type && a.push({
					type: "polygon",
					exterior: r[0],
					interiors: r.slice(1)
				}), "MultiPolygon" === i.type && f(r, function(t) {
					t[0] && a.push({
						type: "polygon",
						exterior: t[0],
						interiors: t.slice(1)
					})
				});
				var o = new ec(n[e || "name"], a, n.cp);
				return o.properties = n, o
			})
		},
		cb = lr(),
		db = [0, 1],
		fb = function(t, e, n) {
			this.dim = t, this.scale = e, this._extent = n || [0, 0], this.inverse = !1, this.onBand = !1
		};
	fb.prototype = {
		constructor: fb,
		contain: function(t) {
			var e = this._extent,
				n = Math.min(e[0], e[1]),
				i = Math.max(e[0], e[1]);
			return t >= n && i >= t
		},
		containData: function(t) {
			return this.scale.contain(t)
		},
		getExtent: function() {
			return this._extent.slice()
		},
		getPixelPrecision: function(t) {
			return To(t || this.scale.getExtent(), this._extent)
		},
		setExtent: function(t, e) {
			var n = this._extent;
			n[0] = t, n[1] = e
		},
		dataToCoord: function(t, e) {
			var n = this._extent,
				i = this.scale;
			return t = i.normalize(t), this.onBand && "ordinal" === i.type && (n = n.slice(), yc(n, i.count())), _o(t, db, n,
				e)
		},
		coordToData: function(t, e) {
			var n = this._extent,
				i = this.scale;
			this.onBand && "ordinal" === i.type && (n = n.slice(), yc(n, i.count()));
			var r = _o(t, n, db, e);
			return this.scale.scale(r)
		},
		pointToData: function() {},
		getTicksCoords: function(t) {
			t = t || {};
			var e = t.tickModel || this.getTickModel(),
				n = ac(this, e),
				i = n.ticks,
				r = p(i, function(t) {
					return {
						coord: this.dataToCoord(t),
						tickValue: t
					}
				}, this),
				a = e.get("alignWithLabel");
			return xc(this, r, a, t.clamp), r
		},
		getMinorTicksCoords: function() {
			if ("ordinal" === this.scale.type) return [];
			var t = this.model.getModel("minorTick"),
				e = t.get("splitNumber");
			e > 0 && 100 > e || (e = 5);
			var n = this.scale.getMinorTicks(e),
				i = p(n, function(t) {
					return p(t, function(t) {
						return {
							coord: this.dataToCoord(t),
							tickValue: t
						}
					}, this)
				}, this);
			return i
		},
		getViewLabels: function() {
			return rc(this).labels
		},
		getLabelModel: function() {
			return this.model.getModel("axisLabel")
		},
		getTickModel: function() {
			return this.model.getModel("axisTick")
		},
		getBandWidth: function() {
			var t = this._extent,
				e = this.scale.getExtent(),
				n = e[1] - e[0] + (this.onBand ? 1 : 0);
			0 === n && (n = 1);
			var i = Math.abs(t[1] - t[0]);
			return Math.abs(i) / n
		},
		isHorizontal: null,
		getRotate: null,
		calculateCategoryInterval: function() {
			return pc(this)
		}
	};
	var pb = hb,
		gb = {};
	f(["map", "each", "filter", "indexOf", "inherits", "reduce", "filter", "bind", "curry", "isArray", "isString",
		"isObject", "isFunction", "extend", "defaults", "clone", "merge"
	], function(t) {
		gb[t] = Mp[t]
	});
	var vb = {};
	f(["extendShape", "extendPath", "makePath", "makeImage", "mergePath", "resizePath", "createIcon", "setHoverStyle",
		"setLabelStyle", "setTextStyle", "setText", "getFont", "updateProps", "initProps", "getTransform",
		"clipPointsByRect", "clipRectByRect", "registerShape", "getShapeClass", "Group", "Image", "Text", "Circle",
		"Sector", "Ring", "Polygon", "Polyline", "Rect", "Line", "BezierCurve", "Arc", "IncrementalDisplayable",
		"CompoundPath", "LinearGradient", "RadialGradient", "BoundingRect"
	], function(t) {
		vb[t] = by[t]
	});
	var mb = function(t) {
		this._axes = {}, this._dimList = [], this.name = t || ""
	};
	mb.prototype = {
		constructor: mb,
		type: "cartesian",
		getAxis: function(t) {
			return this._axes[t]
		},
		getAxes: function() {
			return p(this._dimList, _c, this)
		},
		getAxesByScale: function(t) {
			return t = t.toLowerCase(), v(this.getAxes(), function(e) {
				return e.scale.type === t
			})
		},
		addAxis: function(t) {
			var e = t.dim;
			this._axes[e] = t, this._dimList.push(e)
		},
		dataToCoord: function(t) {
			return this._dataCoordConvert(t, "dataToCoord")
		},
		coordToData: function(t) {
			return this._dataCoordConvert(t, "coordToData")
		},
		_dataCoordConvert: function(t, e) {
			for (var n = this._dimList, i = t instanceof Array ? [] : {}, r = 0; r < n.length; r++) {
				var a = n[r],
					o = this._axes[a];
				i[a] = o[e](t[a])
			}
			return i
		}
	}, wc.prototype = {
		constructor: wc,
		type: "cartesian2d",
		dimensions: ["x", "y"],
		getBaseAxis: function() {
			return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAxis("x")
		},
		containPoint: function(t) {
			var e = this.getAxis("x"),
				n = this.getAxis("y");
			return e.contain(e.toLocalCoord(t[0])) && n.contain(n.toLocalCoord(t[1]))
		},
		containData: function(t) {
			return this.getAxis("x").containData(t[0]) && this.getAxis("y").containData(t[1])
		},
		dataToPoint: function(t, e, n) {
			var i = this.getAxis("x"),
				r = this.getAxis("y");
			return n = n || [], n[0] = i.toGlobalCoord(i.dataToCoord(t[0])), n[1] = r.toGlobalCoord(r.dataToCoord(t[1])), n
		},
		clampData: function(t, e) {
			var n = this.getAxis("x").scale,
				i = this.getAxis("y").scale,
				r = n.getExtent(),
				a = i.getExtent(),
				o = n.parse(t[0]),
				s = i.parse(t[1]);
			return e = e || [], e[0] = Math.min(Math.max(Math.min(r[0], r[1]), o), Math.max(r[0], r[1])), e[1] = Math.min(
				Math.max(Math.min(a[0], a[1]), s), Math.max(a[0], a[1])), e
		},
		pointToData: function(t, e) {
			var n = this.getAxis("x"),
				i = this.getAxis("y");
			return e = e || [], e[0] = n.coordToData(n.toLocalCoord(t[0])), e[1] = i.coordToData(i.toLocalCoord(t[1])), e
		},
		getOtherAxis: function(t) {
			return this.getAxis("x" === t.dim ? "y" : "x")
		},
		getArea: function() {
			var t = this.getAxis("x").getGlobalExtent(),
				e = this.getAxis("y").getGlobalExtent(),
				n = Math.min(t[0], t[1]),
				i = Math.min(e[0], e[1]),
				r = Math.max(t[0], t[1]) - n,
				a = Math.max(e[0], e[1]) - i,
				o = new Tn(n, i, r, a);
			return o
		}
	}, h(wc, mb);
	var yb = function(t, e, n, i, r) {
		fb.call(this, t, e, n), this.type = i || "value", this.position = r || "bottom"
	};
	yb.prototype = {
		constructor: yb,
		index: 0,
		getAxesOnZeroOf: null,
		model: null,
		isHorizontal: function() {
			var t = this.position;
			return "top" === t || "bottom" === t
		},
		getGlobalExtent: function(t) {
			var e = this.getExtent();
			return e[0] = this.toGlobalCoord(e[0]), e[1] = this.toGlobalCoord(e[1]), t && e[0] > e[1] && e.reverse(), e
		},
		getOtherAxis: function() {
			this.grid.getOtherAxis()
		},
		pointToData: function(t, e) {
			return this.coordToData(this.toLocalCoord(t["x" === this.dim ? 0 : 1]), e)
		},
		toLocalCoord: null,
		toGlobalCoord: null
	}, h(yb, fb);
	var xb = {
			show: !0,
			zlevel: 0,
			z: 0,
			inverse: !1,
			name: "",
			nameLocation: "end",
			nameRotate: null,
			nameTruncate: {
				maxWidth: null,
				ellipsis: "...",
				placeholder: "."
			},
			nameTextStyle: {},
			nameGap: 15,
			silent: !1,
			triggerEvent: !1,
			tooltip: {
				show: !1
			},
			axisPointer: {},
			axisLine: {
				show: !0,
				onZero: !0,
				onZeroAxisIndex: null,
				lineStyle: {
					color: "#333",
					width: 1,
					type: "solid"
				},
				symbol: ["none", "none"],
				symbolSize: [10, 15]
			},
			axisTick: {
				show: !0,
				inside: !1,
				length: 5,
				lineStyle: {
					width: 1
				}
			},
			axisLabel: {
				show: !0,
				inside: !1,
				rotate: 0,
				showMinLabel: null,
				showMaxLabel: null,
				margin: 8,
				fontSize: 12
			},
			splitLine: {
				show: !0,
				lineStyle: {
					color: ["#ccc"],
					width: 1,
					type: "solid"
				}
			},
			splitArea: {
				show: !1,
				areaStyle: {
					color: ["rgba(250,250,250,0.3)", "rgba(200,200,200,0.3)"]
				}
			}
		},
		_b = {};
	_b.categoryAxis = r({
		boundaryGap: !0,
		deduplication: null,
		splitLine: {
			show: !1
		},
		axisTick: {
			alignWithLabel: !1,
			interval: "auto"
		},
		axisLabel: {
			interval: "auto"
		}
	}, xb), _b.valueAxis = r({
		boundaryGap: [0, 0],
		splitNumber: 5,
		minorTick: {
			show: !1,
			splitNumber: 5,
			length: 3,
			lineStyle: {}
		},
		minorSplitLine: {
			show: !1,
			lineStyle: {
				color: "#eee",
				width: 1
			}
		}
	}, xb), _b.timeAxis = s({
		scale: !0,
		min: "dataMin",
		max: "dataMax"
	}, _b.valueAxis), _b.logAxis = s({
		scale: !0,
		logBase: 10
	}, _b.valueAxis);
	var wb = ["value", "category", "time", "log"],
		bb = function(t, e, n, i) {
			f(wb, function(o) {
				e.extend({
					type: t + "Axis." + o,
					mergeDefaultAndTheme: function(e, i) {
						var a = this.layoutMode,
							s = a ? Qo(e) : {},
							l = i.getTheme();
						r(e, l.get(o + "Axis")), r(e, this.getDefaultOption()), e.type = n(t, e), a && $o(e, s, a)
					},
					optionUpdated: function() {
						var t = this.option;
						"category" === t.type && (this.__ordinalMeta = yh.createByAxisModel(this))
					},
					getCategories: function(t) {
						var e = this.option;
						return "category" === e.type ? t ? e.data : this.__ordinalMeta.categories : void 0
					},
					getOrdinalMeta: function() {
						return this.__ordinalMeta
					},
					defaultOption: a([{}, _b[o + "Axis"], i], !0)
				})
			}), qy.registerSubTypeDefaulter(t + "Axis", x(n, t))
		},
		Sb = qy.extend({
			type: "cartesian2dAxis",
			axis: null,
			init: function() {
				Sb.superApply(this, "init", arguments), this.resetRange()
			},
			mergeOption: function() {
				Sb.superApply(this, "mergeOption", arguments), this.resetRange()
			},
			restoreData: function() {
				Sb.superApply(this, "restoreData", arguments), this.resetRange()
			},
			getCoordSysModel: function() {
				return this.ecModel.queryComponents({
					mainType: "grid",
					index: this.option.gridIndex,
					id: this.option.gridId
				})[0]
			}
		});
	r(Sb.prototype, Qw);
	var Mb = {
		offset: 0
	};
	bb("x", Sb, bc, Mb), bb("y", Sb, bc, Mb), qy.extend({
		type: "grid",
		dependencies: ["xAxis", "yAxis"],
		layoutMode: "box",
		coordinateSystem: null,
		defaultOption: {
			show: !1,
			zlevel: 0,
			z: 0,
			left: "10%",
			top: 60,
			right: "10%",
			bottom: 60,
			containLabel: !1,
			backgroundColor: "rgba(0,0,0,0)",
			borderWidth: 1,
			borderColor: "#ccc"
		}
	});
	var Ib = Mc.prototype;
	Ib.type = "grid", Ib.axisPointerEnabled = !0, Ib.getRect = function() {
		return this._rect
	}, Ib.update = function(t, e) {
		var n = this._axesMap;
		this._updateScale(t, this.model), f(n.x, function(t) {
			Fh(t.scale, t.model)
		}), f(n.y, function(t) {
			Fh(t.scale, t.model)
		});
		var i = {};
		f(n.x, function(t) {
			Ic(n, "y", t, i)
		}), f(n.y, function(t) {
			Ic(n, "x", t, i)
		}), this.resize(this.model, e)
	}, Ib.resize = function(t, e, n) {
		function i() {
			f(a, function(t) {
				var e = t.isHorizontal(),
					n = e ? [0, r.width] : [0, r.height],
					i = t.inverse ? 1 : 0;
				t.setExtent(n[i], n[1 - i]), Cc(t, e ? r.x : r.y)
			})
		}
		var r = Ko(t.getBoxLayoutParams(), {
			width: e.getWidth(),
			height: e.getHeight()
		});
		this._rect = r;
		var a = this._axesList;
		i(), !n && t.get("containLabel") && (f(a, function(t) {
			if (!t.model.get("axisLabel.inside")) {
				var e = Xh(t);
				if (e) {
					var n = t.isHorizontal() ? "height" : "width",
						i = t.model.get("axisLabel.margin");
					r[n] -= e[n] + i, "top" === t.position ? r.y += e.height + i : "left" === t.position && (r.x += e.width + i)
				}
			}
		}), i())
	}, Ib.getAxis = function(t, e) {
		var n = this._axesMap[t];
		if (null != n) {
			if (null == e)
				for (var i in n)
					if (n.hasOwnProperty(i)) return n[i];
			return n[e]
		}
	}, Ib.getAxes = function() {
		return this._axesList.slice()
	}, Ib.getCartesian = function(t, e) {
		if (null != t && null != e) {
			var n = "x" + t + "y" + e;
			return this._coordsMap[n]
		}
		S(t) && (e = t.yAxisIndex, t = t.xAxisIndex);
		for (var i = 0, r = this._coordsList; i < r.length; i++)
			if (r[i].getAxis("x").index === t || r[i].getAxis("y").index === e) return r[i]
	}, Ib.getCartesians = function() {
		return this._coordsList.slice()
	}, Ib.convertToPixel = function(t, e, n) {
		var i = this._findConvertTarget(t, e);
		return i.cartesian ? i.cartesian.dataToPoint(n) : i.axis ? i.axis.toGlobalCoord(i.axis.dataToCoord(n)) : null
	}, Ib.convertFromPixel = function(t, e, n) {
		var i = this._findConvertTarget(t, e);
		return i.cartesian ? i.cartesian.pointToData(n) : i.axis ? i.axis.coordToData(i.axis.toLocalCoord(n)) : null
	}, Ib._findConvertTarget = function(t, e) {
		var n, i, r = e.seriesModel,
			a = e.xAxisModel || r && r.getReferringComponents("xAxis")[0],
			o = e.yAxisModel || r && r.getReferringComponents("yAxis")[0],
			s = e.gridModel,
			l = this._coordsList;
		if (r) n = r.coordinateSystem, u(l, n) < 0 && (n = null);
		else if (a && o) n = this.getCartesian(a.componentIndex, o.componentIndex);
		else if (a) i = this.getAxis("x", a.componentIndex);
		else if (o) i = this.getAxis("y", o.componentIndex);
		else if (s) {
			var h = s.coordinateSystem;
			h === this && (n = this._coordsList[0])
		}
		return {
			cartesian: n,
			axis: i
		}
	}, Ib.containPoint = function(t) {
		var e = this._coordsList[0];
		return e ? e.containPoint(t) : void 0
	}, Ib._initCartesian = function(t, e) {
		function n(n) {
			return function(o, s) {
				if (Sc(o, t, e)) {
					var l = o.get("position");
					"x" === n ? "top" !== l && "bottom" !== l && (l = i.bottom ? "top" : "bottom") : "left" !== l && "right" !== l &&
						(l = i.left ? "right" : "left"), i[l] = !0;
					var u = new yb(n, Vh(o), [0, 0], o.get("type"), l),
						h = "category" === u.type;
					u.onBand = h && o.get("boundaryGap"), u.inverse = o.get("inverse"), o.axis = u, u.model = o, u.grid = this, u.index =
						s, this._axesList.push(u), r[n][s] = u, a[n]++
				}
			}
		}
		var i = {
				left: !1,
				right: !1,
				top: !1,
				bottom: !1
			},
			r = {
				x: {},
				y: {}
			},
			a = {
				x: 0,
				y: 0
			};
		return e.eachComponent("xAxis", n("x"), this), e.eachComponent("yAxis", n("y"), this), a.x && a.y ? (this._axesMap =
			r, void f(r.x, function(e, n) {
				f(r.y, function(i, r) {
					var a = "x" + n + "y" + r,
						o = new wc(a);
					o.grid = this, o.model = t, this._coordsMap[a] = o, this._coordsList.push(o), o.addAxis(e), o.addAxis(i)
				}, this)
			}, this)) : (this._axesMap = {}, void(this._axesList = []))
	}, Ib._updateScale = function(t, e) {
		function n(t, e) {
			f(t.mapDimension(e.dim, !0), function(n) {
				e.scale.unionExtentFromData(t, fh(t, n))
			})
		}
		f(this._axesList, function(t) {
			t.scale.setExtent(1 / 0, -1 / 0)
		}), t.eachSeries(function(i) {
			if (Dc(i)) {
				var r = Ac(i, t),
					a = r[0],
					o = r[1];
				if (!Sc(a, e, t) || !Sc(o, e, t)) return;
				var s = this.getCartesian(a.componentIndex, o.componentIndex),
					l = i.getData(),
					u = s.getAxis("x"),
					h = s.getAxis("y");
				"list" === l.type && (n(l, u, i), n(l, h, i))
			}
		}, this)
	}, Ib.getTooltipAxes = function(t) {
		var e = [],
			n = [];
		return f(this.getCartesians(), function(i) {
			var r = null != t && "auto" !== t ? i.getAxis(t) : i.getBaseAxis(),
				a = i.getOtherAxis(r);
			u(e, r) < 0 && e.push(r), u(n, a) < 0 && n.push(a)
		}), {
			baseAxes: e,
			otherAxes: n
		}
	};
	var Tb = ["xAxis", "yAxis"];
	Mc.create = function(t, e) {
		var n = [];
		return t.eachComponent("grid", function(i, r) {
			var a = new Mc(i, t, e);
			a.name = "grid_" + r, a.resize(i, e, !0), i.coordinateSystem = a, n.push(a)
		}), t.eachSeries(function(e) {
			if (Dc(e)) {
				var n = Ac(e, t),
					i = n[0],
					r = n[1],
					a = i.getCoordSysModel();
				if (op) {
					if (!a) throw new Error('Grid "' + A(i.get("gridIndex"), i.get("gridId"), 0) + '" not found');
					if (i.getCoordSysModel() !== r.getCoordSysModel()) throw new Error("xAxis and yAxis must use the same grid")
				}
				var o = a.coordinateSystem;
				e.coordinateSystem = o.getCartesian(i.componentIndex, r.componentIndex)
			}
		}), n
	}, Mc.dimensions = Mc.prototype.dimensions = wc.prototype.dimensions, Is.register("cartesian2d", Mc);
	var Cb = Bx.extend({
		type: "series.__base_bar__",
		getInitialData: function() {
			return ph(this.getSource(), this, {
				useEncodeDefaulter: !0
			})
		},
		getMarkerPosition: function(t) {
			var e = this.coordinateSystem;
			if (e) {
				var n = e.dataToPoint(e.clampData(t)),
					i = this.getData(),
					r = i.getLayout("offset"),
					a = i.getLayout("size"),
					o = e.getBaseAxis().isHorizontal() ? 0 : 1;
				return n[o] += r + a / 2, n
			}
			return [0 / 0, 0 / 0]
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "cartesian2d",
			legendHoverLink: !0,
			barMinHeight: 0,
			barMinAngle: 0,
			large: !1,
			largeThreshold: 400,
			progressive: 3e3,
			progressiveChunkMode: "mod",
			itemStyle: {},
			emphasis: {}
		}
	});
	Cb.extend({
		type: "series.bar",
		dependencies: ["grid", "polar"],
		brushSelector: "rect",
		getProgressive: function() {
			return this.get("large") ? this.get("progressive") : !1
		},
		getProgressiveThreshold: function() {
			var t = this.get("progressiveThreshold"),
				e = this.get("largeThreshold");
			return e > t && (t = e), t
		},
		defaultOption: {
			clip: !0,
			roundCap: !1,
			showBackground: !1,
			backgroundStyle: {
				color: "rgba(180, 180, 180, 0.2)",
				borderColor: null,
				borderWidth: 0,
				borderType: "solid",
				borderRadius: 0,
				shadowBlur: 0,
				shadowColor: null,
				shadowOffsetX: 0,
				shadowOffsetY: 0,
				opacity: 1
			}
		}
	});
	var Ab = Lv([
			["fill", "color"],
			["stroke", "borderColor"],
			["lineWidth", "borderWidth"],
			["stroke", "barBorderColor"],
			["lineWidth", "barBorderWidth"],
			["opacity"],
			["shadowBlur"],
			["shadowOffsetX"],
			["shadowOffsetY"],
			["shadowColor"]
		]),
		Db = {
			getBarItemStyle: function(t) {
				var e = Ab(this, t);
				if (this.getBorderLineDash) {
					var n = this.getBorderLineDash();
					n && (e.lineDash = n)
				}
				return e
			}
		},
		kb = pa({
			type: "sausage",
			shape: {
				cx: 0,
				cy: 0,
				r0: 0,
				r: 0,
				startAngle: 0,
				endAngle: 2 * Math.PI,
				clockwise: !0
			},
			buildPath: function(t, e) {
				var n = e.cx,
					i = e.cy,
					r = Math.max(e.r0 || 0, 0),
					a = Math.max(e.r, 0),
					o = .5 * (a - r),
					s = r + o,
					l = e.startAngle,
					u = e.endAngle,
					h = e.clockwise,
					c = Math.cos(l),
					d = Math.sin(l),
					f = Math.cos(u),
					p = Math.sin(u),
					g = h ? u - l < 2 * Math.PI : l - u < 2 * Math.PI;
				g && (t.moveTo(c * r + n, d * r + i), t.arc(c * s + n, d * s + i, o, -Math.PI + l, l, !h)), t.arc(n, i, a, l, u,
						!h), t.moveTo(f * a + n, p * a + i), t.arc(f * s + n, p * s + i, o, u - 2 * Math.PI, u - Math.PI, !h), 0 !==
					r && (t.arc(n, i, r, u, l, h), t.moveTo(c * r + n, p * r + i)), t.closePath()
			}
		}),
		Pb = ["itemStyle", "barBorderWidth"],
		Lb = [0, 0];
	o(fo.prototype, Db), Ou({
		type: "bar",
		render: function(t, e, n) {
			this._updateDrawMode(t);
			var i = t.get("coordinateSystem");
			return "cartesian2d" === i || "polar" === i ? this._isLargeDraw ? this._renderLarge(t, e, n) : this._renderNormal(
				t, e, n) : op && console.warn("Only cartesian2d and polar supported for bar."), this.group
		},
		incrementalPrepareRender: function(t) {
			this._clear(), this._updateDrawMode(t)
		},
		incrementalRender: function(t, e) {
			this._incrementalRenderLarge(t, e)
		},
		_updateDrawMode: function(t) {
			var e = t.pipelineContext.large;
			(null == this._isLargeDraw || e ^ this._isLargeDraw) && (this._isLargeDraw = e, this._clear())
		},
		_renderNormal: function(t) {
			var e, n = this.group,
				i = t.getData(),
				r = this._data,
				a = t.coordinateSystem,
				o = a.getBaseAxis();
			"cartesian2d" === a.type ? e = o.isHorizontal() : "polar" === a.type && (e = "angle" === o.dim);
			var s = t.isAnimationEnabled() ? t : null,
				l = t.get("clip", !0),
				u = zc(a, i);
			n.removeClipPath();
			var h = t.get("roundCap", !0),
				c = t.get("showBackground", !0),
				d = t.getModel("backgroundStyle"),
				f = d.get("barBorderRadius") || 0,
				p = [],
				g = this._backgroundEls || [],
				v = function(t) {
					var n = Rb[a.type](i, t),
						r = qc(a, e, n);
					return r.useStyle(d.getBarItemStyle()), "cartesian2d" === a.type && r.setShape("r", f), p[t] = r, r
				};
			i.diff(r).add(function(r) {
				var o = i.getItemModel(r),
					d = Rb[a.type](i, r, o);
				if (c && v(r), i.hasValue(r)) {
					if (l) {
						var f = Bb[a.type](u, d);
						if (f) return void n.remove(p)
					}
					var p = zb[a.type](r, d, e, s, !1, h);
					i.setItemGraphicEl(r, p), n.add(p), Vc(p, i, r, o, d, t, e, "polar" === a.type)
				}
			}).update(function(o, m) {
				var y = i.getItemModel(o),
					x = Rb[a.type](i, o, y);
				if (c) {
					var _;
					0 === g.length ? _ = v(m) : (_ = g[m], _.useStyle(d.getBarItemStyle()), "cartesian2d" === a.type && _.setShape(
						"r", f), p[o] = _);
					var w = Rb[a.type](i, o),
						b = Yc(e, w, a);
					Ja(_, {
						shape: b
					}, s, o)
				}
				var S = r.getItemGraphicEl(m);
				if (!i.hasValue(o)) return void n.remove(S);
				if (l) {
					var M = Bb[a.type](u, x);
					if (M) return void n.remove(S)
				}
				S ? Ja(S, {
					shape: x
				}, s, o) : S = zb[a.type](o, x, e, s, !0, h), i.setItemGraphicEl(o, S), n.add(S), Vc(S, i, o, y, x, t, e,
					"polar" === a.type)
			}).remove(function(t) {
				var e = r.getItemGraphicEl(t);
				"cartesian2d" === a.type ? e && Rc(t, s, e) : e && Nc(t, s, e)
			}).execute();
			var m = this._backgroundGroup || (this._backgroundGroup = new Mg);
			m.removeAll();
			for (var y = 0; y < p.length; ++y) m.add(p[y]);
			n.add(m), this._backgroundEls = p, this._data = i
		},
		_renderLarge: function(t) {
			this._clear(), Gc(t, this.group);
			var e = t.get("clip", !0) ? Bc(t.coordinateSystem, !1, t) : null;
			e ? this.group.setClipPath(e) : this.group.removeClipPath()
		},
		_incrementalRenderLarge: function(t, e) {
			this._removeBackground(), Gc(e, this.group, !0)
		},
		dispose: V,
		remove: function(t) {
			this._clear(t)
		},
		_clear: function(t) {
			var e = this.group,
				n = this._data;
			t && t.get("animation") && n && !this._isLargeDraw ? (this._removeBackground(), this._backgroundEls = [], n.eachItemGraphicEl(
				function(e) {
					"sector" === e.type ? Nc(e.dataIndex, t, e) : Rc(e.dataIndex, t, e)
				})) : e.removeAll(), this._data = null
		},
		_removeBackground: function() {
			this.group.remove(this._backgroundGroup), this._backgroundGroup = null
		}
	});
	var Ob = Math.max,
		Eb = Math.min,
		Bb = {
			cartesian2d: function(t, e) {
				var n = e.width < 0 ? -1 : 1,
					i = e.height < 0 ? -1 : 1;
				0 > n && (e.x += e.width, e.width = -e.width), 0 > i && (e.y += e.height, e.height = -e.height);
				var r = Ob(e.x, t.x),
					a = Eb(e.x + e.width, t.x + t.width),
					o = Ob(e.y, t.y),
					s = Eb(e.y + e.height, t.y + t.height);
				e.x = r, e.y = o, e.width = a - r, e.height = s - o;
				var l = e.width < 0 || e.height < 0;
				return 0 > n && (e.x += e.width, e.width = -e.width), 0 > i && (e.y += e.height, e.height = -e.height), l
			},
			polar: function(t, e) {
				var n = e.r0 <= e.r ? 1 : -1;
				if (0 > n) {
					var i = e.r;
					e.r = e.r0, e.r0 = i
				}
				var i = Eb(e.r, t.r),
					r = Ob(e.r0, t.r0);
				e.r = i, e.r0 = r;
				var a = 0 > i - r;
				if (0 > n) {
					var i = e.r;
					e.r = e.r0, e.r0 = i
				}
				return a
			}
		},
		zb = {
			cartesian2d: function(t, e, n, i, r) {
				var a = new $m({
					shape: o({}, e),
					z2: 1
				});
				if (a.name = "item", i) {
					var s = a.shape,
						l = n ? "height" : "width",
						u = {};
					s[l] = 0, u[l] = e[l], by[r ? "updateProps" : "initProps"](a, {
						shape: u
					}, i, t)
				}
				return a
			},
			polar: function(t, e, n, i, r, a) {
				var o = e.startAngle < e.endAngle,
					l = !n && a ? kb : Wm,
					u = new l({
						shape: s({
							clockwise: o
						}, e),
						z2: 1
					});
				if (u.name = "item", i) {
					var h = u.shape,
						c = n ? "r" : "endAngle",
						d = {};
					h[c] = n ? 0 : e.startAngle, d[c] = e[c], by[r ? "updateProps" : "initProps"](u, {
						shape: d
					}, i, t)
				}
				return u
			}
		},
		Rb = {
			cartesian2d: function(t, e, n) {
				var i = t.getItemLayout(e),
					r = n ? Hc(n, i) : 0,
					a = i.width > 0 ? 1 : -1,
					o = i.height > 0 ? 1 : -1;
				return {
					x: i.x + a * r / 2,
					y: i.y + o * r / 2,
					width: i.width - a * r,
					height: i.height - o * r
				}
			},
			polar: function(t, e) {
				var n = t.getItemLayout(e);
				return {
					cx: n.cx,
					cy: n.cy,
					r0: n.r0,
					r: n.r,
					startAngle: n.startAngle,
					endAngle: n.endAngle
				}
			}
		},
		Nb = ta.extend({
			type: "largeBar",
			shape: {
				points: []
			},
			buildPath: function(t, e) {
				for (var n = e.points, i = this.__startPoint, r = this.__baseDimIdx, a = 0; a < n.length; a += 2) i[r] = n[a + r],
					t.moveTo(i[0], i[1]), t.lineTo(n[a], n[a + 1])
			}
		}),
		Fb = vl(function(t) {
			var e = this,
				n = Wc(e, t.offsetX, t.offsetY);
			e.dataIndex = n >= 0 ? n : null
		}, 30, !1),
		Vb = Math.PI,
		Hb = function(t, e) {
			this.opt = e, this.axisModel = t, s(e, {
				labelOffset: 0,
				nameDirection: 1,
				tickDirection: 1,
				labelDirection: 1,
				silent: !0
			}), this.group = new Mg;
			var n = new Mg({
				position: e.position.slice(),
				rotation: e.rotation
			});
			n.updateTransform(), this._transform = n.transform, this._dumbGroup = n
		};
	Hb.prototype = {
		constructor: Hb,
		hasBuilder: function(t) {
			return !!Gb[t]
		},
		add: function(t) {
			Gb[t].call(this)
		},
		getGroup: function() {
			return this.group
		}
	};
	var Gb = {
			axisLine: function() {
				var t = this.opt,
					e = this.axisModel;
				if (e.get("axisLine.show")) {
					var n = this.axisModel.axis.getExtent(),
						i = this._transform,
						r = [n[0], 0],
						a = [n[1], 0];
					i && (ae(r, r, i), ae(a, a, i));
					var s = o({
						lineCap: "round"
					}, e.getModel("axisLine.lineStyle").getLineStyle());
					this.group.add(new Jm({
						anid: "line",
						subPixelOptimize: !0,
						shape: {
							x1: r[0],
							y1: r[1],
							x2: a[0],
							y2: a[1]
						},
						style: s,
						strokeContainThreshold: t.strokeContainThreshold || 5,
						silent: !0,
						z2: 1
					}));
					var l = e.get("axisLine.symbol"),
						u = e.get("axisLine.symbolSize"),
						h = e.get("axisLine.symbolOffset") || 0;
					if ("number" == typeof h && (h = [h, h]), null != l) {
						"string" == typeof l && (l = [l, l]), ("string" == typeof u || "number" == typeof u) && (u = [u, u]);
						var c = u[0],
							d = u[1];
						f([{
							rotate: t.rotation + Math.PI / 2,
							offset: h[0],
							r: 0
						}, {
							rotate: t.rotation - Math.PI / 2,
							offset: h[1],
							r: Math.sqrt((r[0] - a[0]) * (r[0] - a[0]) + (r[1] - a[1]) * (r[1] - a[1]))
						}], function(e, n) {
							if ("none" !== l[n] && null != l[n]) {
								var i = Zh(l[n], -c / 2, -d / 2, c, d, s.stroke, !0),
									a = e.r + e.offset,
									o = [r[0] + a * Math.cos(t.rotation), r[1] - a * Math.sin(t.rotation)];
								i.attr({
									rotation: e.rotate,
									position: o,
									silent: !0,
									z2: 11
								}), this.group.add(i)
							}
						}, this)
					}
				}
			},
			axisTickLabel: function() {
				var t = this.axisModel,
					e = this.opt,
					n = td(this, t, e),
					i = nd(this, t, e);
				Zc(t, i, n), ed(this, t, e)
			},
			axisName: function() {
				var t = this.opt,
					e = this.axisModel,
					n = A(t.axisName, e.get("name"));
				if (n) {
					var i, r = e.get("nameLocation"),
						a = t.nameDirection,
						s = e.getModel("nameTextStyle"),
						l = e.get("nameGap") || 0,
						u = this.axisModel.axis.getExtent(),
						h = u[0] > u[1] ? -1 : 1,
						c = ["start" === r ? u[0] - h * l : "end" === r ? u[1] + h * l : (u[0] + u[1]) / 2, Qc(r) ? t.labelOffset + a *
							l : 0
						],
						d = e.get("nameRotate");
					null != d && (d = d * Vb / 180);
					var f;
					Qc(r) ? i = Xb(t.rotation, null != d ? d : t.rotation, a) : (i = jc(t, r, d || 0, u), f = t.axisNameAvailableWidth,
						null != f && (f = Math.abs(f / Math.sin(i.rotation)), !isFinite(f) && (f = null)));
					var p = s.getFont(),
						g = e.get("nameTruncate", !0) || {},
						v = g.ellipsis,
						m = A(t.nameTruncateMaxWidth, g.maxWidth, f),
						y = null != v && null != m ? Fy(n, m, p, v, {
							minChar: 2,
							placeholder: g.placeholder
						}) : n,
						x = e.get("tooltip", !0),
						_ = e.mainType,
						w = {
							componentType: _,
							name: n,
							$vars: ["name"]
						};
					w[_ + "Index"] = e.componentIndex;
					var b = new Fm({
						anid: "name",
						__fullText: n,
						__truncatedText: y,
						position: c,
						rotation: i.rotation,
						silent: Ub(e),
						z2: 1,
						tooltip: x && x.show ? o({
							content: n,
							formatter: function() {
								return n
							},
							formatterParams: w
						}, x) : null
					});
					Wa(b.style, s, {
							text: y,
							textFont: p,
							textFill: s.getTextColor() || e.get("axisLine.lineStyle.color"),
							textAlign: s.get("align") || i.textAlign,
							textVerticalAlign: s.get("verticalAlign") || i.textVerticalAlign
						}), e.get("triggerEvent") && (b.eventData = Wb(e), b.eventData.targetType = "axisName", b.eventData.name = n),
						this._dumbGroup.add(b), b.updateTransform(), this.group.add(b), b.decomposeTransform()
				}
			}
		},
		Wb = Hb.makeAxisEventDataBase = function(t) {
			var e = {
				componentType: t.mainType,
				componentIndex: t.componentIndex
			};
			return e[t.mainType + "Index"] = t.componentIndex, e
		},
		Xb = Hb.innerTextLayout = function(t, e, n) {
			var i, r, a = Ao(e - t);
			return Do(a) ? (r = n > 0 ? "top" : "bottom", i = "center") : Do(a - Vb) ? (r = n > 0 ? "bottom" : "top", i =
				"center") : (r = "middle", i = a > 0 && Vb > a ? n > 0 ? "right" : "left" : n > 0 ? "left" : "right"), {
				rotation: a,
				textAlign: i,
				textVerticalAlign: r
			}
		},
		Ub = Hb.isLabelSilent = function(t) {
			var e = t.get("tooltip");
			return t.get("silent") || !(t.get("triggerEvent") || e && e.show)
		},
		Yb = f,
		qb = x,
		jb = Pu({
			type: "axis",
			_axisPointer: null,
			axisPointerClass: null,
			render: function(t, e, n, i) {
				this.axisPointerClass && ud(t), jb.superApply(this, "render", arguments), pd(this, t, e, n, i, !0)
			},
			updateAxisPointer: function(t, e, n, i) {
				pd(this, t, e, n, i, !1)
			},
			remove: function(t, e) {
				var n = this._axisPointer;
				n && n.remove(e), jb.superApply(this, "remove", arguments)
			},
			dispose: function(t, e) {
				gd(this, e), jb.superApply(this, "dispose", arguments)
			}
		}),
		Zb = [];
	jb.registerAxisPointerClass = function(t, e) {
		if (op && Zb[t]) throw new Error("axisPointer " + t + " exists");
		Zb[t] = e
	}, jb.getAxisPointerClass = function(t) {
		return t && Zb[t]
	};
	var Kb = ["axisLine", "axisTickLabel", "axisName"],
		$b = ["splitArea", "splitLine", "minorSplitLine"],
		Qb = jb.extend({
			type: "cartesianAxis",
			axisPointerClass: "CartesianAxisPointer",
			render: function(t, e, n, i) {
				this.group.removeAll();
				var r = this._axisGroup;
				if (this._axisGroup = new Mg, this.group.add(this._axisGroup), t.get("show")) {
					var a = t.getCoordSysModel(),
						o = vd(a, t),
						s = new Hb(t, o);
					f(Kb, s.add, s), this._axisGroup.add(s.getGroup()), f($b, function(e) {
						t.get(e + ".show") && this["_" + e](t, a)
					}, this), ro(r, this._axisGroup, t), Qb.superCall(this, "render", t, e, n, i)
				}
			},
			remove: function() {
				yd(this)
			},
			_splitLine: function(t, e) {
				var n = t.axis;
				if (!n.scale.isBlank()) {
					var i = t.getModel("splitLine"),
						r = i.getModel("lineStyle"),
						a = r.get("color");
					a = _(a) ? a : [a];
					for (var o = e.coordinateSystem.getRect(), l = n.isHorizontal(), u = 0, h = n.getTicksCoords({
							tickModel: i
						}), c = [], d = [], f = r.getLineStyle(), p = 0; p < h.length; p++) {
						var g = n.toGlobalCoord(h[p].coord);
						l ? (c[0] = g, c[1] = o.y, d[0] = g, d[1] = o.y + o.height) : (c[0] = o.x, c[1] = g, d[0] = o.x + o.width, d[1] =
							g);
						var v = u++ % a.length,
							m = h[p].tickValue;
						this._axisGroup.add(new Jm({
							anid: null != m ? "line_" + h[p].tickValue : null,
							subPixelOptimize: !0,
							shape: {
								x1: c[0],
								y1: c[1],
								x2: d[0],
								y2: d[1]
							},
							style: s({
								stroke: a[v]
							}, f),
							silent: !0
						}))
					}
				}
			},
			_minorSplitLine: function(t, e) {
				var n = t.axis,
					i = t.getModel("minorSplitLine"),
					r = i.getModel("lineStyle"),
					a = e.coordinateSystem.getRect(),
					o = n.isHorizontal(),
					s = n.getMinorTicksCoords();
				if (s.length)
					for (var l = [], u = [], h = r.getLineStyle(), c = 0; c < s.length; c++)
						for (var d = 0; d < s[c].length; d++) {
							var f = n.toGlobalCoord(s[c][d].coord);
							o ? (l[0] = f, l[1] = a.y, u[0] = f, u[1] = a.y + a.height) : (l[0] = a.x, l[1] = f, u[0] = a.x + a.width, u[
								1] = f), this._axisGroup.add(new Jm({
								anid: "minor_line_" + s[c][d].tickValue,
								subPixelOptimize: !0,
								shape: {
									x1: l[0],
									y1: l[1],
									x2: u[0],
									y2: u[1]
								},
								style: h,
								silent: !0
							}))
						}
			},
			_splitArea: function(t, e) {
				md(this, this._axisGroup, t, e)
			}
		});
	Qb.extend({
		type: "xAxis"
	}), Qb.extend({
		type: "yAxis"
	}), Pu({
		type: "grid",
		render: function(t) {
			this.group.removeAll(), t.get("show") && this.group.add(new $m({
				shape: t.coordinateSystem.getRect(),
				style: s({
					fill: t.get("backgroundColor")
				}, t.getItemStyle()),
				silent: !0,
				z2: -1
			}))
		}
	}), _u(function(t) {
		t.xAxis && t.yAxis && !t.grid && (t.grid = {})
	}), Tu(F_.VISUAL.LAYOUT, x(Lh, "bar")), Tu(F_.VISUAL.PROGRESSIVE_LAYOUT, Lw), Cu({
		seriesType: "bar",
		reset: function(t) {
			t.getData().setVisual("legendSymbol", "roundRect")
		}
	}), Bx.extend({
		type: "series.line",
		dependencies: ["grid", "polar"],
		getInitialData: function(t) {
			if (op) {
				var e = t.coordinateSystem;
				if ("polar" !== e && "cartesian2d" !== e) throw new Error(
					"Line not support coordinateSystem besides cartesian and polar")
			}
			return ph(this.getSource(), this, {
				useEncodeDefaulter: !0
			})
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "cartesian2d",
			legendHoverLink: !0,
			hoverAnimation: !0,
			clip: !0,
			label: {
				position: "top"
			},
			lineStyle: {
				width: 2,
				type: "solid"
			},
			step: !1,
			smooth: !1,
			smoothMonotone: null,
			symbol: "emptyCircle",
			symbolSize: 4,
			symbolRotate: null,
			showSymbol: !0,
			showAllSymbol: "auto",
			connectNulls: !1,
			sampling: "none",
			animationEasing: "linear",
			progressive: 0,
			hoverLayerThreshold: 1 / 0
		}
	});
	var Jb = xd.prototype,
		tS = xd.getSymbolSize = function(t, e) {
			var n = t.getItemVisual(e, "symbolSize");
			return n instanceof Array ? n.slice() : [+n, +n]
		};
	Jb._createSymbol = function(t, e, n, i, r) {
		this.removeAll();
		var a = e.getItemVisual(n, "color"),
			o = Zh(t, -1, -1, 2, 2, a, r);
		o.attr({
			z2: 100,
			culling: !0,
			scale: _d(i)
		}), o.drift = wd, this._symbolType = t, this.add(o)
	}, Jb.stopSymbolAnimation = function(t) {
		this.childAt(0).stopAnimation(t)
	}, Jb.getSymbolPath = function() {
		return this.childAt(0)
	}, Jb.getScale = function() {
		return this.childAt(0).scale
	}, Jb.highlight = function() {
		this.childAt(0).trigger("emphasis")
	}, Jb.downplay = function() {
		this.childAt(0).trigger("normal")
	}, Jb.setZ = function(t, e) {
		var n = this.childAt(0);
		n.zlevel = t, n.z = e
	}, Jb.setDraggable = function(t) {
		var e = this.childAt(0);
		e.draggable = t, e.cursor = t ? "move" : e.cursor
	}, Jb.updateData = function(t, e, n) {
		this.silent = !1;
		var i = t.getItemVisual(e, "symbol") || "circle",
			r = t.hostModel,
			a = tS(t, e),
			o = i !== this._symbolType;
		if (o) {
			var s = t.getItemVisual(e, "symbolKeepAspect");
			this._createSymbol(i, t, e, a, s)
		} else {
			var l = this.childAt(0);
			l.silent = !1, Ja(l, {
				scale: _d(a)
			}, r, e)
		}
		if (this._updateCommon(t, e, a, n), o) {
			var l = this.childAt(0),
				u = n && n.fadeIn,
				h = {
					scale: l.scale.slice()
				};
			u && (h.style = {
				opacity: l.style.opacity
			}), l.scale = [0, 0], u && (l.style.opacity = 0), to(l, h, r, e)
		}
		this._seriesModel = r
	};
	var eS = ["itemStyle"],
		nS = ["emphasis", "itemStyle"],
		iS = ["label"],
		rS = ["emphasis", "label"];
	Jb._updateCommon = function(t, e, n, i) {
		function r(e) {
			return b ? t.getName(e) : kc(t, e)
		}
		var a = this.childAt(0),
			s = t.hostModel,
			l = t.getItemVisual(e, "color");
		"image" !== a.type ? a.useStyle({
			strokeNoScale: !0
		}) : a.setStyle({
			opacity: 1,
			shadowBlur: null,
			shadowOffsetX: null,
			shadowOffsetY: null,
			shadowColor: null
		});
		var u = i && i.itemStyle,
			h = i && i.hoverItemStyle,
			c = i && i.symbolOffset,
			d = i && i.labelModel,
			f = i && i.hoverLabelModel,
			p = i && i.hoverAnimation,
			g = i && i.cursorStyle;
		if (!i || t.hasItemOption) {
			var v = i && i.itemModel ? i.itemModel : t.getItemModel(e);
			u = v.getModel(eS).getItemStyle(["color"]), h = v.getModel(nS).getItemStyle(), c = v.getShallow("symbolOffset"), d =
				v.getModel(iS), f = v.getModel(rS), p = v.getShallow("hoverAnimation"), g = v.getShallow("cursor")
		} else h = o({}, h);
		var m = a.style,
			y = t.getItemVisual(e, "symbolRotate");
		a.attr("rotation", (y || 0) * Math.PI / 180 || 0), c && a.attr("position", [wo(c[0], n[0]), wo(c[1], n[1])]), g &&
			a.attr("cursor", g), a.setColor(l, i && i.symbolInnerColor), a.setStyle(u);
		var x = t.getItemVisual(e, "opacity");
		null != x && (m.opacity = x);
		var _ = t.getItemVisual(e, "liftZ"),
			w = a.__z2Origin;
		null != _ ? null == w && (a.__z2Origin = a.z2, a.z2 += _) : null != w && (a.z2 = w, a.__z2Origin = null);
		var b = i && i.useNameLabel;
		Ha(m, h, d, f, {
				labelFetcher: s,
				labelDataIndex: e,
				defaultText: r,
				isRectText: !0,
				autoColor: l
			}), a.__symbolOriginalScale = _d(n), a.hoverStyle = h, a.highDownOnUpdate = p && s.isAnimationEnabled() ? bd :
			null, Ra(a)
	}, Jb.fadeOut = function(t, e) {
		var n = this.childAt(0);
		this.silent = n.silent = !0, !(e && e.keepLabel) && (n.style.text = null), Ja(n, {
			style: {
				opacity: 0
			},
			scale: [0, 0]
		}, this._seriesModel, this.dataIndex, t)
	}, h(xd, Mg);
	var aS = Sd.prototype;
	aS.updateData = function(t, e) {
		e = Id(e);
		var n = this.group,
			i = t.hostModel,
			r = this._data,
			a = this._symbolCtor,
			o = Td(t);
		r || n.removeAll(), t.diff(r).add(function(i) {
			var r = t.getItemLayout(i);
			if (Md(t, r, i, e)) {
				var s = new a(t, i, o);
				s.attr("position", r), t.setItemGraphicEl(i, s), n.add(s)
			}
		}).update(function(s, l) {
			var u = r.getItemGraphicEl(l),
				h = t.getItemLayout(s);
			return Md(t, h, s, e) ? (u ? (u.updateData(t, s, o), Ja(u, {
				position: h
			}, i)) : (u = new a(t, s), u.attr("position", h)), n.add(u), void t.setItemGraphicEl(s, u)) : void n.remove(u)
		}).remove(function(t) {
			var e = r.getItemGraphicEl(t);
			e && e.fadeOut(function() {
				n.remove(e)
			})
		}).execute(), this._data = t
	}, aS.isPersistent = function() {
		return !0
	}, aS.updateLayout = function() {
		var t = this._data;
		t && t.eachItemGraphicEl(function(e, n) {
			var i = t.getItemLayout(n);
			e.attr("position", i)
		})
	}, aS.incrementalPrepareUpdate = function(t) {
		this._seriesScope = Td(t), this._data = null, this.group.removeAll()
	}, aS.incrementalUpdate = function(t, e, n) {
		function i(t) {
			t.isGroup || (t.incremental = t.useHoverLayer = !0)
		}
		n = Id(n);
		for (var r = t.start; r < t.end; r++) {
			var a = e.getItemLayout(r);
			if (Md(e, a, r, n)) {
				var o = new this._symbolCtor(e, r, this._seriesScope);
				o.traverse(i), o.attr("position", a), this.group.add(o), e.setItemGraphicEl(r, o)
			}
		}
	}, aS.remove = function(t) {
		var e = this.group,
			n = this._data;
		n && t ? n.eachItemGraphicEl(function(t) {
			t.fadeOut(function() {
				e.remove(t)
			})
		}) : e.removeAll()
	};
	var oS = function(t, e, n, i, r, a, o, s) {
			for (var l = kd(t, e), u = [], h = [], c = [], d = [], f = [], p = [], g = [], v = Cd(r, e, o), m = Cd(a, t, s), y =
					0; y < l.length; y++) {
				var x = l[y],
					_ = !0;
				switch (x.cmd) {
					case "=":
						var w = t.getItemLayout(x.idx),
							b = e.getItemLayout(x.idx1);
						(isNaN(w[0]) || isNaN(w[1])) && (w = b.slice()), u.push(w), h.push(b), c.push(n[x.idx]), d.push(i[x.idx1]), g.push(
							e.getRawIndex(x.idx1));
						break;
					case "+":
						var S = x.idx;
						u.push(r.dataToPoint([e.get(v.dataDimsForPoint[0], S), e.get(v.dataDimsForPoint[1], S)])), h.push(e.getItemLayout(
							S).slice()), c.push(Dd(v, r, e, S)), d.push(i[S]), g.push(e.getRawIndex(S));
						break;
					case "-":
						var S = x.idx,
							M = t.getRawIndex(S);
						M !== S ? (u.push(t.getItemLayout(S)), h.push(a.dataToPoint([t.get(m.dataDimsForPoint[0], S), t.get(m.dataDimsForPoint[
							1], S)])), c.push(n[S]), d.push(Dd(m, a, t, S)), g.push(M)) : _ = !1
				}
				_ && (f.push(x), p.push(p.length))
			}
			p.sort(function(t, e) {
				return g[t] - g[e]
			});
			for (var I = [], T = [], C = [], A = [], D = [], y = 0; y < p.length; y++) {
				var S = p[y];
				I[y] = u[S], T[y] = h[S], C[y] = c[S], A[y] = d[S], D[y] = f[S]
			}
			return {
				current: I,
				next: T,
				stackedOnCurrent: C,
				stackedOnNext: A,
				status: D
			}
		},
		sS = oe,
		lS = se,
		uS = Y,
		hS = G,
		cS = [],
		dS = [],
		fS = [],
		pS = ta.extend({
			type: "ec-polyline",
			shape: {
				points: [],
				smooth: 0,
				smoothConstraint: !0,
				smoothMonotone: null,
				connectNulls: !1
			},
			style: {
				fill: null,
				stroke: "#000"
			},
			brush: Gm(ta.prototype.brush),
			buildPath: function(t, e) {
				var n = e.points,
					i = 0,
					r = n.length,
					a = Bd(n, e.smoothConstraint);
				if (e.connectNulls) {
					for (; r > 0 && Pd(n[r - 1]); r--);
					for (; r > i && Pd(n[i]); i++);
				}
				for (; r > i;) i += Ld(t, n, i, r, r, 1, a.min, a.max, e.smooth, e.smoothMonotone, e.connectNulls) + 1
			}
		}),
		gS = ta.extend({
			type: "ec-polygon",
			shape: {
				points: [],
				stackedOnPoints: [],
				smooth: 0,
				stackedOnSmooth: 0,
				smoothConstraint: !0,
				smoothMonotone: null,
				connectNulls: !1
			},
			brush: Gm(ta.prototype.brush),
			buildPath: function(t, e) {
				var n = e.points,
					i = e.stackedOnPoints,
					r = 0,
					a = n.length,
					o = e.smoothMonotone,
					s = Bd(n, e.smoothConstraint),
					l = Bd(i, e.smoothConstraint);
				if (e.connectNulls) {
					for (; a > 0 && Pd(n[a - 1]); a--);
					for (; a > r && Pd(n[r]); r++);
				}
				for (; a > r;) {
					var u = Ld(t, n, r, a, a, 1, s.min, s.max, e.smooth, o, e.connectNulls);
					Ld(t, i, r + u - 1, u, a, -1, l.min, l.max, e.stackedOnSmooth, o, e.connectNulls), r += u + 1, t.closePath()
				}
			}
		});
	cl.extend({
		type: "line",
		init: function() {
			var t = new Mg,
				e = new Sd;
			this.group.add(e.group), this._symbolDraw = e, this._lineGroup = t
		},
		render: function(t, e, n) {
			var i = t.coordinateSystem,
				r = this.group,
				a = t.getData(),
				o = t.getModel("lineStyle"),
				l = t.getModel("areaStyle"),
				u = a.mapArray(a.getItemLayout),
				h = "polar" === i.type,
				c = this._coordSys,
				d = this._symbolDraw,
				f = this._polyline,
				p = this._polygon,
				g = this._lineGroup,
				v = t.get("animation"),
				m = !l.isEmpty(),
				y = l.get("origin"),
				x = Cd(i, a, y),
				_ = Fd(i, a, x),
				w = t.get("showSymbol"),
				b = w && !h && Gd(t, a, i),
				S = this._data;
			S && S.eachItemGraphicEl(function(t, e) {
				t.__temp && (r.remove(t), S.setItemGraphicEl(e, null))
			}), w || d.remove(), r.add(g);
			var M, I = !h && t.get("step");
			i && i.getArea && t.get("clip", !0) && (M = i.getArea(), null != M.width ? (M.x -= .1, M.y -= .1, M.width += .2,
					M.height += .2) : M.r0 && (M.r0 -= .5, M.r1 += .5)), this._clipShapeForSymbol = M, f && c.type === i.type && I ===
				this._step ? (m && !p ? p = this._newPolygon(u, _, i, v) : p && !m && (g.remove(p), p = this._polygon = null),
					g.setClipPath(Xd(i, !1, t)), w && d.updateData(a, {
						isIgnore: b,
						clipShape: M
					}), a.eachItemGraphicEl(function(t) {
						t.stopAnimation(!0)
					}), zd(this._stackedOnPoints, _) && zd(this._points, u) || (v ? this._updateAnimation(a, _, i, n, I, y) : (I &&
						(u = Vd(u, i, I), _ = Vd(_, i, I)), f.setShape({
							points: u
						}), p && p.setShape({
							points: u,
							stackedOnPoints: _
						})))) : (w && d.updateData(a, {
					isIgnore: b,
					clipShape: M
				}), I && (u = Vd(u, i, I), _ = Vd(_, i, I)), f = this._newPolyline(u, i, v), m && (p = this._newPolygon(u, _,
					i, v)), g.setClipPath(Xd(i, !0, t)));
			var T = Hd(a, i) || a.getVisual("color");
			f.useStyle(s(o.getLineStyle(), {
				fill: "none",
				stroke: T,
				lineJoin: "bevel"
			}));
			var C = t.get("smooth");
			if (C = Nd(t.get("smooth")), f.setShape({
					smooth: C,
					smoothMonotone: t.get("smoothMonotone"),
					connectNulls: t.get("connectNulls")
				}), p) {
				var A = a.getCalculationInfo("stackedOnSeries"),
					D = 0;
				p.useStyle(s(l.getAreaStyle(), {
					fill: T,
					opacity: .7,
					lineJoin: "bevel"
				})), A && (D = Nd(A.get("smooth"))), p.setShape({
					smooth: C,
					stackedOnSmooth: D,
					smoothMonotone: t.get("smoothMonotone"),
					connectNulls: t.get("connectNulls")
				})
			}
			this._data = a, this._coordSys = i, this._stackedOnPoints = _, this._points = u, this._step = I, this._valueOrigin =
				y
		},
		dispose: function() {},
		highlight: function(t, e, n, i) {
			var r = t.getData(),
				a = sr(r, i);
			if (!(a instanceof Array) && null != a && a >= 0) {
				var o = r.getItemGraphicEl(a);
				if (!o) {
					var s = r.getItemLayout(a);
					if (!s) return;
					if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(s[0], s[1])) return;
					o = new xd(r, a), o.position = s, o.setZ(t.get("zlevel"), t.get("z")), o.ignore = isNaN(s[0]) || isNaN(s[1]),
						o.__temp = !0, r.setItemGraphicEl(a, o), o.stopSymbolAnimation(!0), this.group.add(o)
				}
				o.highlight()
			} else cl.prototype.highlight.call(this, t, e, n, i)
		},
		downplay: function(t, e, n, i) {
			var r = t.getData(),
				a = sr(r, i);
			if (null != a && a >= 0) {
				var o = r.getItemGraphicEl(a);
				o && (o.__temp ? (r.setItemGraphicEl(a, null), this.group.remove(o)) : o.downplay())
			} else cl.prototype.downplay.call(this, t, e, n, i)
		},
		_newPolyline: function(t) {
			var e = this._polyline;
			return e && this._lineGroup.remove(e), e = new pS({
				shape: {
					points: t
				},
				silent: !0,
				z2: 10
			}), this._lineGroup.add(e), this._polyline = e, e
		},
		_newPolygon: function(t, e) {
			var n = this._polygon;
			return n && this._lineGroup.remove(n), n = new gS({
				shape: {
					points: t,
					stackedOnPoints: e
				},
				silent: !0
			}), this._lineGroup.add(n), this._polygon = n, n
		},
		_updateAnimation: function(t, e, n, i, r, a) {
			var o = this._polyline,
				s = this._polygon,
				l = t.hostModel,
				u = oS(this._data, t, this._stackedOnPoints, e, this._coordSys, n, this._valueOrigin, a),
				h = u.current,
				c = u.stackedOnCurrent,
				d = u.next,
				f = u.stackedOnNext;
			if (r && (h = Vd(u.current, n, r), c = Vd(u.stackedOnCurrent, n, r), d = Vd(u.next, n, r), f = Vd(u.stackedOnNext,
					n, r)), Rd(h, d) > 3e3 || s && Rd(c, f) > 3e3) return o.setShape({
				points: d
			}), void(s && s.setShape({
				points: d,
				stackedOnPoints: f
			}));
			o.shape.__points = u.current, o.shape.points = h, Ja(o, {
				shape: {
					points: d
				}
			}, l), s && (s.setShape({
				points: h,
				stackedOnPoints: c
			}), Ja(s, {
				shape: {
					points: d,
					stackedOnPoints: f
				}
			}, l));
			for (var p = [], g = u.status, v = 0; v < g.length; v++) {
				var m = g[v].cmd;
				if ("=" === m) {
					var y = t.getItemGraphicEl(g[v].idx1);
					y && p.push({
						el: y,
						ptIdx: v
					})
				}
			}
			o.animators && o.animators.length && o.animators[0].during(function() {
				for (var t = 0; t < p.length; t++) {
					var e = p[t].el;
					e.attr("position", o.shape.__points[p[t].ptIdx])
				}
			})
		},
		remove: function() {
			var t = this.group,
				e = this._data;
			this._lineGroup.removeAll(), this._symbolDraw.remove(!0), e && e.eachItemGraphicEl(function(n, i) {
				n.__temp && (t.remove(n), e.setItemGraphicEl(i, null))
			}), this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null
		}
	});
	var vS = function(t, e, n) {
			return {
				seriesType: t,
				performRawSeries: !0,
				reset: function(t, i) {
					function r(e, n) {
						if (f) {
							var i = t.getRawValue(n),
								r = t.getDataParams(n);
							h && e.setItemVisual(n, "symbol", o(i, r)), c && e.setItemVisual(n, "symbolSize", s(i, r)), d && e.setItemVisual(
								n, "symbolRotate", u(i, r))
						}
						if (e.hasItemOption) {
							var a = e.getItemModel(n),
								l = a.getShallow("symbol", !0),
								p = a.getShallow("symbolSize", !0),
								g = a.getShallow("symbolRotate", !0),
								v = a.getShallow("symbolKeepAspect", !0);
							null != l && e.setItemVisual(n, "symbol", l), null != p && e.setItemVisual(n, "symbolSize", p), null != g && e
								.setItemVisual(n, "symbolRotate", g), null != v && e.setItemVisual(n, "symbolKeepAspect", v)
						}
					}
					var a = t.getData(),
						o = t.get("symbol"),
						s = t.get("symbolSize"),
						l = t.get("symbolKeepAspect"),
						u = t.get("symbolRotate"),
						h = w(o),
						c = w(s),
						d = w(u),
						f = h || c || d,
						p = !h && o ? o : e,
						g = c ? null : s;
					return a.setVisual({
						legendSymbol: n || p,
						symbol: p,
						symbolSize: g,
						symbolKeepAspect: l,
						symbolRotate: u
					}), i.isSeriesFiltered(t) ? void 0 : {
						dataEach: a.hasItemOption || f ? r : null
					}
				}
			}
		},
		mS = function(t) {
			return {
				seriesType: t,
				plan: Nx(),
				reset: function(t) {
					function e(t, e) {
						for (var n = t.end - t.start, r = a && new Float32Array(n * s), l = t.start, u = 0, h = [], c = []; l < t.end; l++) {
							var d;
							if (1 === s) {
								var f = e.get(o[0], l);
								d = !isNaN(f) && i.dataToPoint(f, null, c)
							} else {
								var f = h[0] = e.get(o[0], l),
									p = h[1] = e.get(o[1], l);
								d = !isNaN(f) && !isNaN(p) && i.dataToPoint(h, null, c)
							}
							a ? (r[u++] = d ? d[0] : 0 / 0, r[u++] = d ? d[1] : 0 / 0) : e.setItemLayout(l, d && d.slice() || [0 / 0, 0 /
								0
							])
						}
						a && e.setLayout("symbolPoints", r)
					}
					var n = t.getData(),
						i = t.coordinateSystem,
						r = t.pipelineContext,
						a = r.large;
					if (i) {
						var o = p(i.dimensions, function(t) {
								return n.mapDimension(t)
							}).slice(0, 2),
							s = o.length,
							l = n.getCalculationInfo("stackResultDimension");
						return dh(n, o[0]) && (o[0] = l), dh(n, o[1]) && (o[1] = l), s && {
							progress: e
						}
					}
				}
			}
		},
		yS = {
			average: function(t) {
				for (var e = 0, n = 0, i = 0; i < t.length; i++) isNaN(t[i]) || (e += t[i], n++);
				return 0 === n ? 0 / 0 : e / n
			},
			sum: function(t) {
				for (var e = 0, n = 0; n < t.length; n++) e += t[n] || 0;
				return e
			},
			max: function(t) {
				for (var e = -1 / 0, n = 0; n < t.length; n++) t[n] > e && (e = t[n]);
				return isFinite(e) ? e : 0 / 0
			},
			min: function(t) {
				for (var e = 1 / 0, n = 0; n < t.length; n++) t[n] < e && (e = t[n]);
				return isFinite(e) ? e : 0 / 0
			},
			nearest: function(t) {
				return t[0]
			}
		},
		xS = function(t) {
			return Math.round(t.length / 2)
		},
		_S = function(t) {
			return {
				seriesType: t,
				modifyOutputEnd: !0,
				reset: function(t) {
					var e = t.getData(),
						n = t.get("sampling"),
						i = t.coordinateSystem;
					if ("cartesian2d" === i.type && n) {
						var r = i.getBaseAxis(),
							a = i.getOtherAxis(r),
							o = r.getExtent(),
							s = Math.abs(o[1] - o[0]),
							l = Math.round(e.count() / s);
						if (l > 1) {
							var u;
							"string" == typeof n ? u = yS[n] : "function" == typeof n && (u = n), u && t.setData(e.downSample(e.mapDimension(
								a.dim), 1 / l, u, xS))
						}
					}
				}
			}
		};
	Cu(vS("line", "circle", "line")), Tu(mS("line")), wu(F_.PROCESSOR.STATISTIC, _S("line"));
	var wS = function(t, e, n) {
			e = _(e) && {
				coordDimensions: e
			} || o({}, e);
			var i = t.getSource(),
				r = ww(i, e),
				a = new yw(r, t);
			return a.initData(i, n), a
		},
		bS = {
			updateSelectedMap: function(t) {
				this._targetList = _(t) ? t.slice() : [], this._selectTargetMap = g(t || [], function(t, e) {
					return t.set(e.name, e), t
				}, N())
			},
			select: function(t, e) {
				var n = null != e ? this._targetList[e] : this._selectTargetMap.get(t),
					i = this.get("selectedMode");
				"single" === i && this._selectTargetMap.each(function(t) {
					t.selected = !1
				}), n && (n.selected = !0)
			},
			unSelect: function(t, e) {
				var n = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
				n && (n.selected = !1)
			},
			toggleSelected: function(t, e) {
				var n = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
				return null != n ? (this[n.selected ? "unSelect" : "select"](t, e), n.selected) : void 0
			},
			isSelected: function(t, e) {
				var n = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
				return n && n.selected
			}
		},
		SS = Lu({
			type: "series.pie",
			init: function(t) {
				SS.superApply(this, "init", arguments), this.legendVisualProvider = new Ud(y(this.getData, this), y(this.getRawData,
					this)), this.updateSelectedMap(this._createSelectableList()), this._defaultLabelLine(t)
			},
			mergeOption: function(t) {
				SS.superCall(this, "mergeOption", t), this.updateSelectedMap(this._createSelectableList())
			},
			getInitialData: function() {
				return wS(this, {
					coordDimensions: ["value"],
					encodeDefaulter: x(ds, this)
				})
			},
			_createSelectableList: function() {
				for (var t = this.getRawData(), e = t.mapDimension("value"), n = [], i = 0, r = t.count(); r > i; i++) n.push({
					name: t.getName(i),
					value: t.get(e, i),
					selected: Qs(t, i, "selected")
				});
				return n
			},
			getDataParams: function(t) {
				var e = this.getData(),
					n = SS.superCall(this, "getDataParams", t),
					i = [];
				return e.each(e.mapDimension("value"), function(t) {
					i.push(t)
				}), n.percent = Co(i, t, e.hostModel.get("percentPrecision")), n.$vars.push("percent"), n
			},
			_defaultLabelLine: function(t) {
				tr(t, "labelLine", ["show"]);
				var e = t.labelLine,
					n = t.emphasis.labelLine;
				e.show = e.show && t.label.show, n.show = n.show && t.emphasis.label.show
			},
			defaultOption: {
				zlevel: 0,
				z: 2,
				legendHoverLink: !0,
				hoverAnimation: !0,
				center: ["50%", "50%"],
				radius: [0, "75%"],
				clockwise: !0,
				startAngle: 90,
				minAngle: 0,
				minShowLabelAngle: 0,
				selectedOffset: 10,
				hoverOffset: 10,
				avoidLabelOverlap: !0,
				percentPrecision: 2,
				stillShowZeroSum: !0,
				left: 0,
				top: 0,
				right: 0,
				bottom: 0,
				width: null,
				height: null,
				label: {
					rotate: !1,
					show: !0,
					position: "outer",
					alignTo: "none",
					margin: "25%",
					bleedMargin: 10,
					distanceToLabelLine: 5
				},
				labelLine: {
					show: !0,
					length: 15,
					length2: 15,
					smooth: !1,
					lineStyle: {
						width: 1,
						type: "solid"
					}
				},
				itemStyle: {
					borderWidth: 1
				},
				animationType: "expansion",
				animationTypeUpdate: "transition",
				animationEasing: "cubicOut"
			}
		});
	c(SS, bS);
	var MS = jd.prototype;
	MS.updateData = function(t, e, n) {
		var i = this.childAt(0),
			r = this.childAt(1),
			a = this.childAt(2),
			l = t.hostModel,
			u = t.getItemModel(e),
			h = t.getItemLayout(e),
			c = o({}, h);
		c.label = null;
		var d = l.getShallow("animationTypeUpdate");
		if (n) {
			i.setShape(c);
			var f = l.getShallow("animationType");
			"scale" === f ? (i.shape.r = h.r0, to(i, {
				shape: {
					r: h.r
				}
			}, l, e)) : (i.shape.endAngle = h.startAngle, Ja(i, {
				shape: {
					endAngle: h.endAngle
				}
			}, l, e))
		} else "expansion" === d ? i.setShape(c) : Ja(i, {
			shape: c
		}, l, e);
		var p = t.getItemVisual(e, "color");
		i.useStyle(s({
			lineJoin: "bevel",
			fill: p
		}, u.getModel("itemStyle").getItemStyle())), i.hoverStyle = u.getModel("emphasis.itemStyle").getItemStyle();
		var g = u.getShallow("cursor");
		g && i.attr("cursor", g), qd(this, t.getItemLayout(e), l.isSelected(t.getName(e)), l.get("selectedOffset"), l.get(
			"animation"));
		var v = !n && "transition" === d;
		this._updateLabel(t, e, v), this.highDownOnUpdate = l.get("silent") ? null : function(t, e) {
			var n = l.isAnimationEnabled() && u.get("hoverAnimation");
			"emphasis" === e ? (r.ignore = r.hoverIgnore, a.ignore = a.hoverIgnore, n && (i.stopAnimation(!0), i.animateTo({
				shape: {
					r: h.r + l.get("hoverOffset")
				}
			}, 300, "elasticOut"))) : (r.ignore = r.normalIgnore, a.ignore = a.normalIgnore, n && (i.stopAnimation(!0), i.animateTo({
				shape: {
					r: h.r
				}
			}, 300, "elasticOut")))
		}, Ra(this)
	}, MS._updateLabel = function(t, e, n) {
		var i = this.childAt(1),
			r = this.childAt(2),
			a = t.hostModel,
			o = t.getItemModel(e),
			s = t.getItemLayout(e),
			l = s.label,
			u = t.getItemVisual(e, "color");
		if (!l || isNaN(l.x) || isNaN(l.y)) return void(r.ignore = r.normalIgnore = r.hoverIgnore = i.ignore = i.normalIgnore =
			i.hoverIgnore = !0);
		var h = {
				points: l.linePoints || [
					[l.x, l.y],
					[l.x, l.y],
					[l.x, l.y]
				]
			},
			c = {
				x: l.x,
				y: l.y
			};
		n ? (Ja(i, {
			shape: h
		}, a, e), Ja(r, {
			style: c
		}, a, e)) : (i.attr({
			shape: h
		}), r.attr({
			style: c
		})), r.attr({
			rotation: l.rotation,
			origin: [l.x, l.y],
			z2: 10
		});
		var d = o.getModel("label"),
			f = o.getModel("emphasis.label"),
			p = o.getModel("labelLine"),
			g = o.getModel("emphasis.labelLine"),
			u = t.getItemVisual(e, "color");
		Ha(r.style, r.hoverStyle = {}, d, f, {
			labelFetcher: t.hostModel,
			labelDataIndex: e,
			defaultText: l.text,
			autoColor: u,
			useInsideStyle: !!l.inside
		}, {
			textAlign: l.textAlign,
			textVerticalAlign: l.verticalAlign,
			opacity: t.getItemVisual(e, "opacity")
		}), r.ignore = r.normalIgnore = !d.get("show"), r.hoverIgnore = !f.get("show"), i.ignore = i.normalIgnore = !p.get(
			"show"), i.hoverIgnore = !g.get("show"), i.setStyle({
			stroke: u,
			opacity: t.getItemVisual(e, "opacity")
		}), i.setStyle(p.getModel("lineStyle").getLineStyle()), i.hoverStyle = g.getModel("lineStyle").getLineStyle();
		var v = p.get("smooth");
		v && v === !0 && (v = .4), i.setShape({
			smooth: v
		})
	}, h(jd, Mg);
	var IS = (cl.extend({
			type: "pie",
			init: function() {
				var t = new Mg;
				this._sectorGroup = t
			},
			render: function(t, e, n, i) {
				if (!i || i.from !== this.uid) {
					var r = t.getData(),
						a = this._data,
						o = this.group,
						s = e.get("animation"),
						l = !a,
						u = t.get("animationType"),
						h = t.get("animationTypeUpdate"),
						c = x(Yd, this.uid, t, s, n),
						d = t.get("selectedMode");
					if (r.diff(a).add(function(t) {
							var e = new jd(r, t);
							l && "scale" !== u && e.eachChild(function(t) {
								t.stopAnimation(!0)
							}), d && e.on("click", c), r.setItemGraphicEl(t, e), o.add(e)
						}).update(function(t, e) {
							var n = a.getItemGraphicEl(e);
							l || "transition" === h || n.eachChild(function(t) {
								t.stopAnimation(!0)
							}), n.updateData(r, t), n.off("click"), d && n.on("click", c), o.add(n), r.setItemGraphicEl(t, n)
						}).remove(function(t) {
							var e = a.getItemGraphicEl(t);
							o.remove(e)
						}).execute(), s && r.count() > 0 && (l ? "scale" !== u : "transition" !== h)) {
						for (var f = r.getItemLayout(0), p = 1; isNaN(f.startAngle) && p < r.count(); ++p) f = r.getItemLayout(p);
						var g = Math.max(n.getWidth(), n.getHeight()) / 2,
							v = y(o.removeClipPath, o);
						o.setClipPath(this._createClipPath(f.cx, f.cy, g, f.startAngle, f.clockwise, v, t, l))
					} else o.removeClipPath();
					this._data = r
				}
			},
			dispose: function() {},
			_createClipPath: function(t, e, n, i, r, a, o, s) {
				var l = new Wm({
						shape: {
							cx: t,
							cy: e,
							r0: 0,
							r: n,
							startAngle: i,
							endAngle: i,
							clockwise: r
						}
					}),
					u = s ? to : Ja;
				return u(l, {
					shape: {
						endAngle: i + (r ? 1 : -1) * Math.PI * 2
					}
				}, o, a), l
			},
			containPoint: function(t, e) {
				var n = e.getData(),
					i = n.getItemLayout(0);
				if (i) {
					var r = t[0] - i.cx,
						a = t[1] - i.cy,
						o = Math.sqrt(r * r + a * a);
					return o <= i.r && o >= i.r0
				}
			}
		}), function(t, e) {
			f(e, function(e) {
				e.update = "updateView", Su(e, function(n, i) {
					var r = {};
					return i.eachComponent({
						mainType: "series",
						subType: t,
						query: n
					}, function(t) {
						t[e.method] && t[e.method](n.name, n.dataIndex);
						var i = t.getData();
						i.each(function(e) {
							var n = i.getName(e);
							r[n] = t.isSelected(n) || !1
						})
					}), {
						name: n.name,
						selected: r,
						seriesId: n.seriesId
					}
				})
			})
		}),
		TS = function(t) {
			return {
				getTargetSeries: function(e) {
					var n = {},
						i = N();
					return e.eachSeriesByType(t, function(t) {
						t.__paletteScope = n, i.set(t.uid, t)
					}), i
				},
				reset: function(t) {
					var e = t.getRawData(),
						n = {},
						i = t.getData();
					i.each(function(t) {
						var e = i.getRawIndex(t);
						n[e] = t
					}), e.each(function(r) {
						var a, o = n[r],
							s = null != o && i.getItemVisual(o, "color", !0),
							l = null != o && i.getItemVisual(o, "borderColor", !0);
						if (s && l || (a = e.getItemModel(r)), !s) {
							var u = a.get("itemStyle.color") || t.getColorFromPalette(e.getName(r) || r + "", t.__paletteScope, e.count());
							null != o && i.setItemVisual(o, "color", u)
						}
						if (!l) {
							var h = a.get("itemStyle.borderColor");
							null != o && i.setItemVisual(o, "borderColor", h)
						}
					})
				}
			}
		},
		CS = Math.PI / 180,
		AS = function(t, e, n, i, r, a) {
			var o, s, l = t.getData(),
				u = [],
				h = !1,
				c = (t.get("minShowLabelAngle") || 0) * CS;
			l.each(function(i) {
				var a = l.getItemLayout(i),
					d = l.getItemModel(i),
					f = d.getModel("label"),
					p = f.get("position") || d.get("emphasis.label.position"),
					g = f.get("distanceToLabelLine"),
					v = f.get("alignTo"),
					m = wo(f.get("margin"), n),
					y = f.get("bleedMargin"),
					x = f.getFont(),
					_ = d.getModel("labelLine"),
					w = _.get("length");
				w = wo(w, n);
				var b = _.get("length2");
				if (b = wo(b, n), !(a.angle < c)) {
					var S, M, I, T, C = (a.startAngle + a.endAngle) / 2,
						A = Math.cos(C),
						D = Math.sin(C);
					o = a.cx, s = a.cy;
					var k = t.getFormattedLabel(i, "normal") || l.getName(i),
						P = Un(k, x, T, "top"),
						L = "inside" === p || "inner" === p;
					if ("center" === p) S = a.cx, M = a.cy, T = "center";
					else {
						var O = (L ? (a.r + a.r0) / 2 * A : a.r * A) + o,
							E = (L ? (a.r + a.r0) / 2 * D : a.r * D) + s;
						if (S = O + 3 * A, M = E + 3 * D, !L) {
							var B = O + A * (w + e - a.r),
								z = E + D * (w + e - a.r),
								R = B + (0 > A ? -1 : 1) * b,
								N = z;
							S = "edge" === v ? 0 > A ? r + m : r + n - m : R + (0 > A ? -g : g), M = N, I = [
								[O, E],
								[B, z],
								[R, N]
							]
						}
						T = L ? "center" : "edge" === v ? A > 0 ? "right" : "left" : A > 0 ? "left" : "right"
					}
					var F, V = f.get("rotate");
					F = "number" == typeof V ? V * (Math.PI / 180) : V ? 0 > A ? -C + Math.PI : -C : 0, h = !!F, a.label = {
						x: S,
						y: M,
						position: p,
						height: P.height,
						len: w,
						len2: b,
						linePoints: I,
						textAlign: T,
						verticalAlign: "middle",
						rotation: F,
						inside: L,
						labelDistance: g,
						labelAlignTo: v,
						labelMargin: m,
						bleedMargin: y,
						textRect: P,
						text: k,
						font: x
					}, L || u.push(a.label)
				}
			}), !h && t.get("avoidLabelOverlap") && Kd(u, o, s, e, n, i, r, a)
		},
		DS = 2 * Math.PI,
		kS = Math.PI / 180,
		PS = function(t, e, n) {
			e.eachSeriesByType(t, function(t) {
				var e = t.getData(),
					i = e.mapDimension("value"),
					r = Qd(t, n),
					a = t.get("center"),
					o = t.get("radius");
				_(o) || (o = [0, o]), _(a) || (a = [a, a]);
				var s = wo(r.width, n.getWidth()),
					l = wo(r.height, n.getHeight()),
					u = Math.min(s, l),
					h = wo(a[0], s) + r.x,
					c = wo(a[1], l) + r.y,
					d = wo(o[0], u / 2),
					f = wo(o[1], u / 2),
					p = -t.get("startAngle") * kS,
					g = t.get("minAngle") * kS,
					v = 0;
				e.each(i, function(t) {
					!isNaN(t) && v++
				});
				var m = e.getSum(i),
					y = Math.PI / (m || v) * 2,
					x = t.get("clockwise"),
					w = t.get("roseType"),
					b = t.get("stillShowZeroSum"),
					S = e.getDataExtent(i);
				S[0] = 0;
				var M = DS,
					I = 0,
					T = p,
					C = x ? 1 : -1;
				if (e.each(i, function(t, n) {
						var i;
						if (isNaN(t)) return void e.setItemLayout(n, {
							angle: 0 / 0,
							startAngle: 0 / 0,
							endAngle: 0 / 0,
							clockwise: x,
							cx: h,
							cy: c,
							r0: d,
							r: w ? 0 / 0 : f,
							viewRect: r
						});
						i = "area" !== w ? 0 === m && b ? y : t * y : DS / v, g > i ? (i = g, M -= g) : I += t;
						var a = T + C * i;
						e.setItemLayout(n, {
							angle: i,
							startAngle: T,
							endAngle: a,
							clockwise: x,
							cx: h,
							cy: c,
							r0: d,
							r: w ? _o(t, S, [d, f]) : f,
							viewRect: r
						}), T = a
					}), DS > M && v)
					if (.001 >= M) {
						var A = DS / v;
						e.each(i, function(t, n) {
							if (!isNaN(t)) {
								var i = e.getItemLayout(n);
								i.angle = A, i.startAngle = p + C * n * A, i.endAngle = p + C * (n + 1) * A
							}
						})
					} else y = M / I, T = p, e.each(i, function(t, n) {
						if (!isNaN(t)) {
							var i = e.getItemLayout(n),
								r = i.angle === g ? g : t * y;
							i.startAngle = T, i.endAngle = T + C * r, T += C * r
						}
					});
				AS(t, f, r.width, r.height, r.x, r.y)
			})
		},
		LS = function(t) {
			return {
				seriesType: t,
				reset: function(t, e) {
					var n = e.findComponents({
						mainType: "legend"
					});
					if (n && n.length) {
						var i = t.getData();
						i.filterSelf(function(t) {
							for (var e = i.getName(t), r = 0; r < n.length; r++)
								if (!n[r].isSelected(e)) return !1;
							return !0
						})
					}
				}
			}
		};
	IS("pie", [{
		type: "pieToggleSelect",
		event: "pieselectchanged",
		method: "toggleSelected"
	}, {
		type: "pieSelect",
		event: "pieselected",
		method: "select"
	}, {
		type: "pieUnSelect",
		event: "pieunselected",
		method: "unSelect"
	}]), Cu(TS("pie")), Tu(x(PS, "pie")), wu(LS("pie")), h(Jd, fb), tf.prototype.getIndicatorAxes = function() {
		return this._indicatorAxes
	}, tf.prototype.dataToPoint = function(t, e) {
		var n = this._indicatorAxes[e];
		return this.coordToPoint(n.dataToCoord(t), e)
	}, tf.prototype.coordToPoint = function(t, e) {
		var n = this._indicatorAxes[e],
			i = n.angle,
			r = this.cx + t * Math.cos(i),
			a = this.cy - t * Math.sin(i);
		return [r, a]
	}, tf.prototype.pointToData = function(t) {
		var e = t[0] - this.cx,
			n = t[1] - this.cy,
			i = Math.sqrt(e * e + n * n);
		e /= i, n /= i;
		for (var r, a = Math.atan2(-n, e), o = 1 / 0, s = -1, l = 0; l < this._indicatorAxes.length; l++) {
			var u = this._indicatorAxes[l],
				h = Math.abs(a - u.angle);
			o > h && (r = u, s = l, o = h)
		}
		return [s, +(r && r.coordToData(i))]
	}, tf.prototype.resize = function(t, e) {
		var n = t.get("center"),
			i = e.getWidth(),
			r = e.getHeight(),
			a = Math.min(i, r) / 2;
		this.cx = wo(n[0], i), this.cy = wo(n[1], r), this.startAngle = t.get("startAngle") * Math.PI / 180;
		var o = t.get("radius");
		("string" == typeof o || "number" == typeof o) && (o = [0, o]), this.r0 = wo(o[0], a), this.r = wo(o[1], a), f(this
			._indicatorAxes,
			function(t, e) {
				t.setExtent(this.r0, this.r);
				var n = this.startAngle + e * Math.PI * 2 / this._indicatorAxes.length;
				n = Math.atan2(Math.sin(n), Math.cos(n)), t.angle = n
			}, this)
	}, tf.prototype.update = function(t) {
		function e(t) {
			var e = Math.pow(10, Math.floor(Math.log(t) / Math.LN10)),
				n = t / e;
			return 2 === n ? n = 5 : n *= 2, n * e
		}
		var n = this._indicatorAxes,
			i = this._model;
		f(n, function(t) {
			t.scale.setExtent(1 / 0, -1 / 0)
		}), t.eachSeriesByType("radar", function(e) {
			if ("radar" === e.get("coordinateSystem") && t.getComponent("radar", e.get("radarIndex")) === i) {
				var r = e.getData();
				f(n, function(t) {
					t.scale.unionExtentFromData(r, r.mapDimension(t.dim))
				})
			}
		}, this);
		var r = i.get("splitNumber");
		f(n, function(t) {
			var n = Rh(t.scale, t.model).extent;
			Fh(t.scale, t.model);
			var i = t.model,
				a = t.scale,
				o = i.getMin(),
				s = i.getMax(),
				l = a.getInterval();
			if (null != o && null != s) a.setExtent(+o, +s), a.setInterval((s - o) / r);
			else if (null != o) {
				var u;
				do u = o + l * r, a.setExtent(+o, u), a.setInterval(l), l = e(l); while (u < n[1] && isFinite(u) && isFinite(n[
						1]))
			} else if (null != s) {
				var h;
				do h = s - l * r, a.setExtent(h, +s), a.setInterval(l), l = e(l); while (h > n[0] && isFinite(h) && isFinite(n[
						0]))
			} else {
				var c = a.getTicks().length - 1;
				c > r && (l = e(l));
				var u = Math.ceil(n[1] / l) * l,
					h = bo(u - l * r);
				a.setExtent(h, u), a.setInterval(l)
			}
		})
	}, tf.dimensions = [], tf.create = function(t, e) {
		var n = [];
		return t.eachComponent("radar", function(i) {
			var r = new tf(i, t, e);
			n.push(r), i.coordinateSystem = r
		}), t.eachSeriesByType("radar", function(t) {
			"radar" === t.get("coordinateSystem") && (t.coordinateSystem = n[t.get("radarIndex") || 0])
		}), n
	}, Is.register("radar", tf);
	var OS = _b.valueAxis,
		ES = (ku({
			type: "radar",
			optionUpdated: function() {
				var t = this.get("boundaryGap"),
					e = this.get("splitNumber"),
					n = this.get("scale"),
					a = this.get("axisLine"),
					l = this.get("axisTick"),
					u = this.get("axisType"),
					h = this.get("axisLabel"),
					c = this.get("name"),
					d = this.get("name.show"),
					f = this.get("name.formatter"),
					g = this.get("nameGap"),
					v = this.get("triggerEvent"),
					m = p(this.get("indicator") || [], function(p) {
						null != p.max && p.max > 0 && !p.min ? p.min = 0 : null != p.min && p.min < 0 && !p.max && (p.max = 0);
						var m = c;
						if (null != p.color && (m = s({
								color: p.color
							}, c)), p = r(i(p), {
								boundaryGap: t,
								splitNumber: e,
								scale: n,
								axisLine: a,
								axisTick: l,
								axisType: u,
								axisLabel: h,
								name: p.text,
								nameLocation: "end",
								nameGap: g,
								nameTextStyle: m,
								triggerEvent: v
							}, !1), d || (p.name = ""), "string" == typeof f) {
							var y = p.name;
							p.name = f.replace("{value}", null != y ? y : "")
						} else "function" == typeof f && (p.name = f(p.name, p));
						var x = o(new fo(p, null, this.ecModel), Qw);
						return x.mainType = "radar", x.componentIndex = this.componentIndex, x
					}, this);
				this.getIndicatorModels = function() {
					return m
				}
			},
			defaultOption: {
				zlevel: 0,
				z: 0,
				center: ["50%", "50%"],
				radius: "75%",
				startAngle: 90,
				name: {
					show: !0
				},
				boundaryGap: [0, 0],
				splitNumber: 5,
				nameGap: 15,
				scale: !1,
				shape: "polygon",
				axisLine: r({
					lineStyle: {
						color: "#bbb"
					}
				}, OS.axisLine),
				axisLabel: ef(OS.axisLabel, !1),
				axisTick: ef(OS.axisTick, !1),
				axisType: "interval",
				splitLine: ef(OS.splitLine, !0),
				splitArea: ef(OS.splitArea, !0),
				indicator: []
			}
		}), ["axisLine", "axisTickLabel", "axisName"]);
	Pu({
		type: "radar",
		render: function(t) {
			var e = this.group;
			e.removeAll(), this._buildAxes(t), this._buildSplitLineAndArea(t)
		},
		_buildAxes: function(t) {
			var e = t.coordinateSystem,
				n = e.getIndicatorAxes(),
				i = p(n, function(t) {
					var n = new Hb(t.model, {
						position: [e.cx, e.cy],
						rotation: t.angle,
						labelDirection: -1,
						tickDirection: -1,
						nameDirection: 1
					});
					return n
				});
			f(i, function(t) {
				f(ES, t.add, t), this.group.add(t.getGroup())
			}, this)
		},
		_buildSplitLineAndArea: function(t) {
			function e(t, e, n) {
				var i = n % e.length;
				return t[i] = t[i] || [], i
			}
			var n = t.coordinateSystem,
				i = n.getIndicatorAxes();
			if (i.length) {
				var r = t.get("shape"),
					a = t.getModel("splitLine"),
					o = t.getModel("splitArea"),
					l = a.getModel("lineStyle"),
					u = o.getModel("areaStyle"),
					h = a.get("show"),
					c = o.get("show"),
					d = l.get("color"),
					g = u.get("color");
				d = _(d) ? d : [d], g = _(g) ? g : [g];
				var v = [],
					m = [];
				if ("circle" === r)
					for (var y = i[0].getTicksCoords(), x = n.cx, w = n.cy, b = 0; b < y.length; b++) {
						if (h) {
							var S = e(v, d, b);
							v[S].push(new Vm({
								shape: {
									cx: x,
									cy: w,
									r: y[b].coord
								}
							}))
						}
						if (c && b < y.length - 1) {
							var S = e(m, g, b);
							m[S].push(new Xm({
								shape: {
									cx: x,
									cy: w,
									r0: y[b].coord,
									r: y[b + 1].coord
								}
							}))
						}
					} else
						for (var M, I = p(i, function(t, e) {
								var i = t.getTicksCoords();
								return M = null == M ? i.length - 1 : Math.min(i.length - 1, M), p(i, function(t) {
									return n.coordToPoint(t.coord, e)
								})
							}), T = [], b = 0; M >= b; b++) {
							for (var C = [], A = 0; A < i.length; A++) C.push(I[A][b]);
							if (C[0] ? C.push(C[0].slice()) : op && console.error("Can't draw value axis " + b), h) {
								var S = e(v, d, b);
								v[S].push(new jm({
									shape: {
										points: C
									}
								}))
							}
							if (c && T) {
								var S = e(m, g, b - 1);
								m[S].push(new qm({
									shape: {
										points: C.concat(T)
									}
								}))
							}
							T = C.slice().reverse()
						}
				var D = l.getLineStyle(),
					k = u.getAreaStyle();
				f(m, function(t, e) {
					this.group.add(yy(t, {
						style: s({
							stroke: "none",
							fill: g[e % g.length]
						}, k),
						silent: !0
					}))
				}, this), f(v, function(t, e) {
					this.group.add(yy(t, {
						style: s({
							fill: "none",
							stroke: d[e % d.length]
						}, D),
						silent: !0
					}))
				}, this)
			}
		}
	});
	var BS = Bx.extend({
		type: "series.radar",
		dependencies: ["radar"],
		init: function() {
			BS.superApply(this, "init", arguments), this.legendVisualProvider = new Ud(y(this.getData, this), y(this.getRawData,
				this))
		},
		getInitialData: function() {
			return wS(this, {
				generateCoord: "indicator_",
				generateCoordCount: 1 / 0
			})
		},
		formatTooltip: function(t, e, n, i) {
			var r = this.getData(),
				a = this.coordinateSystem,
				o = a.getIndicatorAxes(),
				s = this.getData().getName(t),
				l = "html" === i ? "<br/>" : "\n";
			return Fo("" === s ? this.name : s) + l + p(o, function(e) {
				var n = r.get(r.mapDimension(e.dim), t);
				return Fo(e.name + " : " + n)
			}).join(l)
		},
		getTooltipPosition: function(t) {
			if (null != t)
				for (var e = this.getData(), n = this.coordinateSystem, i = e.getValues(p(n.dimensions, function(t) {
						return e.mapDimension(t)
					}), t, !0), r = 0, a = i.length; a > r; r++)
					if (!isNaN(i[r])) {
						var o = n.getIndicatorAxes();
						return n.coordToPoint(o[r].dataToCoord(i[r]), r)
					}
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "radar",
			legendHoverLink: !0,
			radarIndex: 0,
			lineStyle: {
				width: 2,
				type: "solid"
			},
			label: {
				position: "top"
			},
			symbol: "emptyCircle",
			symbolSize: 4
		}
	});
	Ou({
		type: "radar",
		render: function(t) {
			function e(t, e) {
				var n = t.getItemVisual(e, "symbol") || "circle",
					i = t.getItemVisual(e, "color");
				if ("none" !== n) {
					var r = nf(t.getItemVisual(e, "symbolSize")),
						a = Zh(n, -1, -1, 2, 2, i),
						o = t.getItemVisual(e, "symbolRotate") || 0;
					return a.attr({
						style: {
							strokeNoScale: !0
						},
						z2: 100,
						scale: [r[0] / 2, r[1] / 2],
						rotation: o * Math.PI / 180 || 0
					}), a
				}
			}

			function n(n, i, r, a, o, s) {
				r.removeAll();
				for (var l = 0; l < i.length - 1; l++) {
					var u = e(a, o);
					u && (u.__dimIdx = l, n[l] ? (u.attr("position", n[l]), by[s ? "initProps" : "updateProps"](u, {
						position: i[l]
					}, t, o)) : u.attr("position", i[l]), r.add(u))
				}
			}

			function r(t) {
				return p(t, function() {
					return [a.cx, a.cy]
				})
			}
			var a = t.coordinateSystem,
				o = this.group,
				l = t.getData(),
				u = this._data;
			l.diff(u).add(function(e) {
				var i = l.getItemLayout(e);
				if (i) {
					var a = new qm,
						o = new jm,
						s = {
							shape: {
								points: i
							}
						};
					a.shape.points = r(i), o.shape.points = r(i), to(a, s, t, e), to(o, s, t, e);
					var u = new Mg,
						h = new Mg;
					u.add(o), u.add(a), u.add(h), n(o.shape.points, i, h, l, e, !0), l.setItemGraphicEl(e, u)
				}
			}).update(function(e, i) {
				var r = u.getItemGraphicEl(i),
					a = r.childAt(0),
					o = r.childAt(1),
					s = r.childAt(2),
					h = {
						shape: {
							points: l.getItemLayout(e)
						}
					};
				h.shape.points && (n(a.shape.points, h.shape.points, s, l, e, !1), Ja(a, h, t), Ja(o, h, t), l.setItemGraphicEl(
					e, r))
			}).remove(function(t) {
				o.remove(u.getItemGraphicEl(t))
			}).execute(), l.eachItemGraphicEl(function(t, e) {
				var n = l.getItemModel(e),
					r = t.childAt(0),
					a = t.childAt(1),
					u = t.childAt(2),
					h = l.getItemVisual(e, "color");
				o.add(t), r.useStyle(s(n.getModel("lineStyle").getLineStyle(), {
					fill: "none",
					stroke: h
				})), r.hoverStyle = n.getModel("emphasis.lineStyle").getLineStyle();
				var c = n.getModel("areaStyle"),
					d = n.getModel("emphasis.areaStyle"),
					f = c.isEmpty() && c.parentModel.isEmpty(),
					p = d.isEmpty() && d.parentModel.isEmpty();
				p = p && f, a.ignore = f, a.useStyle(s(c.getAreaStyle(), {
					fill: h,
					opacity: .7
				})), a.hoverStyle = d.getAreaStyle();
				var g = n.getModel("itemStyle").getItemStyle(["color"]),
					v = n.getModel("emphasis.itemStyle").getItemStyle(),
					m = n.getModel("label"),
					y = n.getModel("emphasis.label");
				u.eachChild(function(t) {
					t.setStyle(g), t.hoverStyle = i(v);
					var n = l.get(l.dimensions[t.__dimIdx], e);
					(null == n || isNaN(n)) && (n = ""), Ha(t.style, t.hoverStyle, m, y, {
						labelFetcher: l.hostModel,
						labelDataIndex: e,
						labelDimIndex: t.__dimIdx,
						defaultText: n,
						autoColor: h,
						isRectText: !0
					})
				}), t.highDownOnUpdate = function(t, e) {
					a.attr("ignore", "emphasis" === e ? p : f)
				}, Ra(t)
			}), this._data = l
		},
		remove: function() {
			this.group.removeAll(), this._data = null
		},
		dispose: function() {}
	});
	var zS = function(t) {
			t.eachSeriesByType("radar", function(t) {
				var e = t.getData(),
					n = [],
					i = t.coordinateSystem;
				if (i) {
					var r = i.getIndicatorAxes();
					f(r, function(t, a) {
						e.each(e.mapDimension(r[a].dim), function(t, e) {
							n[e] = n[e] || [];
							var r = i.dataToPoint(t, a);
							n[e][a] = rf(r) ? r : af(i)
						})
					}), e.each(function(t) {
						var r = m(n[t], function(t) {
							return rf(t)
						}) || af(i);
						n[t].push(r.slice()), e.setItemLayout(t, n[t])
					})
				}
			})
		},
		RS = function(t) {
			var e = t.polar;
			if (e) {
				_(e) || (e = [e]);
				var n = [];
				f(e, function(e) {
					e.indicator ? (e.type && !e.shape && (e.shape = e.type), t.radar = t.radar || [], _(t.radar) || (t.radar = [t.radar]),
						t.radar.push(e)) : n.push(e)
				}), t.polar = n
			}
			f(t.series, function(t) {
				t && "radar" === t.type && t.polarIndex && (t.radarIndex = t.polarIndex)
			})
		};
	Cu(TS("radar")), Cu(vS("radar", "circle")), Tu(zS), wu(LS("radar")), _u(RS), ku({
		type: "title",
		layoutMode: {
			type: "box",
			ignoreSize: !0
		},
		defaultOption: {
			zlevel: 0,
			z: 6,
			show: !0,
			text: "",
			target: "blank",
			subtext: "",
			subtarget: "blank",
			left: 0,
			top: 0,
			backgroundColor: "rgba(0,0,0,0)",
			borderColor: "#ccc",
			borderWidth: 0,
			padding: 5,
			itemGap: 10,
			textStyle: {
				fontSize: 18,
				fontWeight: "bolder",
				color: "#333"
			},
			subtextStyle: {
				color: "#aaa"
			}
		}
	}), Pu({
		type: "title",
		render: function(t, e, n) {
			if (this.group.removeAll(), t.get("show")) {
				var i = this.group,
					r = t.getModel("textStyle"),
					a = t.getModel("subtextStyle"),
					o = t.get("textAlign"),
					s = D(t.get("textBaseline"), t.get("textVerticalAlign")),
					l = new Fm({
						style: Wa({}, r, {
							text: t.get("text"),
							textFill: r.getTextColor()
						}, {
							disableBox: !0
						}),
						z2: 10
					}),
					u = l.getBoundingRect(),
					h = t.get("subtext"),
					c = new Fm({
						style: Wa({}, a, {
							text: h,
							textFill: a.getTextColor(),
							y: u.height + t.get("itemGap"),
							textVerticalAlign: "top"
						}, {
							disableBox: !0
						}),
						z2: 10
					}),
					d = t.get("link"),
					f = t.get("sublink"),
					p = t.get("triggerEvent", !0);
				l.silent = !d && !p, c.silent = !f && !p, d && l.on("click", function() {
					jo(d, "_" + t.get("target"))
				}), f && c.on("click", function() {
					jo(f, "_" + t.get("subtarget"))
				}), l.eventData = c.eventData = p ? {
					componentType: "title",
					componentIndex: t.componentIndex
				} : null, i.add(l), h && i.add(c);
				var g = i.getBoundingRect(),
					v = t.getBoxLayoutParams();
				v.width = g.width, v.height = g.height;
				var m = Ko(v, {
					width: n.getWidth(),
					height: n.getHeight()
				}, t.get("padding"));
				o || (o = t.get("left") || t.get("right"), "middle" === o && (o = "center"), "right" === o ? m.x += m.width :
					"center" === o && (m.x += m.width / 2)), s || (s = t.get("top") || t.get("bottom"), "center" === s && (s =
					"middle"), "bottom" === s ? m.y += m.height : "middle" === s && (m.y += m.height / 2), s = s || "top"), i.attr(
					"position", [m.x, m.y]);
				var y = {
					textAlign: o,
					textVerticalAlign: s
				};
				l.setStyle(y), c.setStyle(y), g = i.getBoundingRect();
				var x = m.margin,
					_ = t.getItemStyle(["color", "opacity"]);
				_.fill = t.get("backgroundColor");
				var w = new $m({
					shape: {
						x: g.x - x[3],
						y: g.y - x[0],
						width: g.width + x[1] + x[3],
						height: g.height + x[0] + x[2],
						r: t.get("borderRadius")
					},
					style: _,
					subPixelOptimize: !0,
					silent: !0
				});
				i.add(w)
			}
		}
	});
	var NS = qx.legend.selector,
		FS = {
			all: {
				type: "all",
				title: i(NS.all)
			},
			inverse: {
				type: "inverse",
				title: i(NS.inverse)
			}
		},
		VS = ku({
			type: "legend.plain",
			dependencies: ["series"],
			layoutMode: {
				type: "box",
				ignoreSize: !0
			},
			init: function(t, e, n) {
				this.mergeDefaultAndTheme(t, n), t.selected = t.selected || {}, this._updateSelector(t)
			},
			mergeOption: function(t) {
				VS.superCall(this, "mergeOption", t), this._updateSelector(t)
			},
			_updateSelector: function(t) {
				var e = t.selector;
				e === !0 && (e = t.selector = ["all", "inverse"]), _(e) && f(e, function(t, n) {
					b(t) && (t = {
						type: t
					}), e[n] = r(t, FS[t.type])
				})
			},
			optionUpdated: function() {
				this._updateData(this.ecModel);
				var t = this._data;
				if (t[0] && "single" === this.get("selectedMode")) {
					for (var e = !1, n = 0; n < t.length; n++) {
						var i = t[n].get("name");
						if (this.isSelected(i)) {
							this.select(i), e = !0;
							break
						}
					}!e && this.select(t[0].get("name"))
				}
			},
			_updateData: function(t) {
				var e = [],
					n = [];
				t.eachRawSeries(function(i) {
					var r = i.name;
					n.push(r);
					var a;
					if (i.legendVisualProvider) {
						var o = i.legendVisualProvider,
							s = o.getAllNames();
						t.isSeriesFiltered(i) || (n = n.concat(s)), s.length ? e = e.concat(s) : a = !0
					} else a = !0;
					a && ar(i) && e.push(i.name)
				}), this._availableNames = n;
				var i = this.get("data") || e,
					r = p(i, function(t) {
						return ("string" == typeof t || "number" == typeof t) && (t = {
							name: t
						}), new fo(t, this, this.ecModel)
					}, this);
				this._data = r
			},
			getData: function() {
				return this._data
			},
			select: function(t) {
				var e = this.option.selected,
					n = this.get("selectedMode");
				if ("single" === n) {
					var i = this._data;
					f(i, function(t) {
						e[t.get("name")] = !1
					})
				}
				e[t] = !0
			},
			unSelect: function(t) {
				"single" !== this.get("selectedMode") && (this.option.selected[t] = !1)
			},
			toggleSelected: function(t) {
				var e = this.option.selected;
				e.hasOwnProperty(t) || (e[t] = !0), this[e[t] ? "unSelect" : "select"](t)
			},
			allSelect: function() {
				var t = this._data,
					e = this.option.selected;
				f(t, function(t) {
					e[t.get("name", !0)] = !0
				})
			},
			inverseSelect: function() {
				var t = this._data,
					e = this.option.selected;
				f(t, function(t) {
					var n = t.get("name", !0);
					e.hasOwnProperty(n) || (e[n] = !0), e[n] = !e[n]
				})
			},
			isSelected: function(t) {
				var e = this.option.selected;
				return !(e.hasOwnProperty(t) && !e[t]) && u(this._availableNames, t) >= 0
			},
			getOrient: function() {
				return "vertical" === this.get("orient") ? {
					index: 1,
					name: "vertical"
				} : {
					index: 0,
					name: "horizontal"
				}
			},
			defaultOption: {
				zlevel: 0,
				z: 4,
				show: !0,
				orient: "horizontal",
				left: "center",
				top: 0,
				align: "auto",
				backgroundColor: "rgba(0,0,0,0)",
				borderColor: "#ccc",
				borderRadius: 0,
				borderWidth: 0,
				padding: 5,
				itemGap: 10,
				itemWidth: 25,
				itemHeight: 14,
				inactiveColor: "#ccc",
				inactiveBorderColor: "#ccc",
				itemStyle: {
					borderWidth: 0
				},
				textStyle: {
					color: "#333"
				},
				selectedMode: !0,
				selector: !1,
				selectorLabel: {
					show: !0,
					borderRadius: 10,
					padding: [3, 5, 3, 5],
					fontSize: 12,
					fontFamily: " sans-serif",
					color: "#666",
					borderWidth: 1,
					borderColor: "#666"
				},
				emphasis: {
					selectorLabel: {
						show: !0,
						color: "#eee",
						backgroundColor: "#666"
					}
				},
				selectorPosition: "auto",
				selectorItemGap: 7,
				selectorButtonGap: 10,
				tooltip: {
					show: !1
				}
			}
		});
	Su("legendToggleSelect", "legendselectchanged", x( of , "toggleSelected")), Su("legendAllSelect", "legendselectall",
		x( of , "allSelect")), Su("legendInverseSelect", "legendinverseselect", x( of , "inverseSelect")), Su(
		"legendSelect", "legendselected", x( of , "select")), Su("legendUnSelect", "legendunselected", x( of , "unSelect"));
	var HS = x,
		GS = f,
		WS = Mg,
		XS = Pu({
			type: "legend.plain",
			newlineDisabled: !1,
			init: function() {
				this.group.add(this._contentGroup = new WS), this._backgroundEl, this.group.add(this._selectorGroup = new WS),
					this._isFirstRender = !0
			},
			getContentGroup: function() {
				return this._contentGroup
			},
			getSelectorGroup: function() {
				return this._selectorGroup
			},
			render: function(t, e, n) {
				var i = this._isFirstRender;
				if (this._isFirstRender = !1, this.resetInner(), t.get("show", !0)) {
					var r = t.get("align"),
						a = t.get("orient");
					r && "auto" !== r || (r = "right" === t.get("left") && "vertical" === a ? "right" : "left");
					var o = t.get("selector", !0),
						l = t.get("selectorPosition", !0);
					!o || l && "auto" !== l || (l = "horizontal" === a ? "end" : "start"), this.renderInner(r, t, e, n, o, a, l);
					var u = t.getBoxLayoutParams(),
						h = {
							width: n.getWidth(),
							height: n.getHeight()
						},
						c = t.get("padding"),
						d = Ko(u, h, c),
						f = this.layoutInner(t, r, d, i, o, l),
						p = Ko(s({
							width: f.width,
							height: f.height
						}, u), h, c);
					this.group.attr("position", [p.x - f.x, p.y - f.y]), this.group.add(this._backgroundEl = sf(f, t))
				}
			},
			resetInner: function() {
				this.getContentGroup().removeAll(), this._backgroundEl && this.group.remove(this._backgroundEl), this.getSelectorGroup()
					.removeAll()
			},
			renderInner: function(t, e, n, i, r, a, o) {
				var s = this.getContentGroup(),
					l = N(),
					u = e.get("selectedMode"),
					h = [];
				n.eachRawSeries(function(t) {
					!t.get("legendHoverLink") && h.push(t.id)
				}), GS(e.getData(), function(r, a) {
					var o = r.get("name");
					if (!this.newlineDisabled && ("" === o || "\n" === o)) return void s.add(new WS({
						newline: !0
					}));
					var c = n.getSeriesByName(o)[0];
					if (!l.get(o)) {
						if (c) {
							var d = c.getData(),
								f = d.getVisual("color"),
								p = d.getVisual("borderColor");
							"function" == typeof f && (f = f(c.getDataParams(0))), "function" == typeof p && (p = p(c.getDataParams(0)));
							var g = d.getVisual("legendSymbol") || "roundRect",
								v = d.getVisual("symbol"),
								m = this._createItem(o, a, r, e, g, v, t, f, p, u);
							m.on("click", HS(uf, o, null, i, h)).on("mouseover", HS(hf, c.name, null, i, h)).on("mouseout", HS(cf, c.name,
								null, i, h)), l.set(o, !0)
						} else n.eachRawSeries(function(n) {
							if (!l.get(o) && n.legendVisualProvider) {
								var s = n.legendVisualProvider;
								if (!s.containName(o)) return;
								var c = s.indexOfName(o),
									d = s.getItemVisual(c, "color"),
									f = s.getItemVisual(c, "borderColor"),
									p = "roundRect",
									g = this._createItem(o, a, r, e, p, null, t, d, f, u);
								g.on("click", HS(uf, null, o, i, h)).on("mouseover", HS(hf, null, o, i, h)).on("mouseout", HS(cf, null,
									o, i, h)), l.set(o, !0)
							}
						}, this);
						op && (l.get(o) || console.warn(o +
							" series not exists. Legend data should be same with series name or data name."))
					}
				}, this), r && this._createSelector(r, e, i, a, o)
			},
			_createSelector: function(t, e, n) {
				function i(t) {
					var i = t.type,
						a = new Fm({
							style: {
								x: 0,
								y: 0,
								align: "center",
								verticalAlign: "middle"
							},
							onclick: function() {
								n.dispatchAction({
									type: "all" === i ? "legendAllSelect" : "legendInverseSelect"
								})
							}
						});
					r.add(a);
					var o = e.getModel("selectorLabel"),
						s = e.getModel("emphasis.selectorLabel");
					Ha(a.style, a.hoverStyle = {}, o, s, {
						defaultText: t.title,
						isRectText: !1
					}), Ra(a)
				}
				var r = this.getSelectorGroup();
				GS(t, function(t) {
					i(t)
				})
			},
			_createItem: function(t, e, n, i, r, a, s, l, u, h) {
				var c = i.get("itemWidth"),
					d = i.get("itemHeight"),
					f = i.get("inactiveColor"),
					p = i.get("inactiveBorderColor"),
					g = i.get("symbolKeepAspect"),
					v = i.getModel("itemStyle"),
					m = i.isSelected(t),
					y = new WS,
					x = n.getModel("textStyle"),
					_ = n.get("icon"),
					w = n.getModel("tooltip"),
					b = w.parentModel;
				r = _ || r;
				var S = Zh(r, 0, 0, c, d, m ? l : f, null == g ? !0 : g);
				if (y.add(lf(S, r, v, u, p, m)), !_ && a && (a !== r || "none" === a)) {
					var M = .8 * d;
					"none" === a && (a = "circle");
					var I = Zh(a, (c - M) / 2, (d - M) / 2, M, M, m ? l : f, null == g ? !0 : g);
					y.add(lf(I, a, v, u, p, m))
				}
				var T = "left" === s ? c + 5 : -5,
					C = s,
					A = i.get("formatter"),
					D = t;
				"string" == typeof A && A ? D = A.replace("{name}", null != t ? t : "") : "function" == typeof A && (D = A(t)),
					y.add(new Fm({
						style: Wa({}, x, {
							text: D,
							x: T,
							y: d / 2,
							textFill: m ? x.getTextColor() : f,
							textAlign: C,
							textVerticalAlign: "middle"
						})
					}));
				var k = new $m({
					shape: y.getBoundingRect(),
					invisible: !0,
					tooltip: w.get("show") ? o({
						content: t,
						formatter: b.get("formatter", !0) || function() {
							return t
						},
						formatterParams: {
							componentType: "legend",
							legendIndex: i.componentIndex,
							name: t,
							$vars: ["name"]
						}
					}, w.option) : null
				});
				return y.add(k), y.eachChild(function(t) {
					t.silent = !0
				}), k.silent = !h, this.getContentGroup().add(y), Ra(y), y.__legendDataIndex = e, y
			},
			layoutInner: function(t, e, n, i, r, a) {
				var o = this.getContentGroup(),
					s = this.getSelectorGroup();
				Xy(t.get("orient"), o, t.get("itemGap"), n.width, n.height);
				var l = o.getBoundingRect(),
					u = [-l.x, -l.y];
				if (r) {
					Xy("horizontal", s, t.get("selectorItemGap", !0));
					var h = s.getBoundingRect(),
						c = [-h.x, -h.y],
						d = t.get("selectorButtonGap", !0),
						f = t.getOrient().index,
						p = 0 === f ? "width" : "height",
						g = 0 === f ? "height" : "width",
						v = 0 === f ? "y" : "x";
					"end" === a ? c[f] += l[p] + d : u[f] += h[p] + d, c[1 - f] += l[g] / 2 - h[g] / 2, s.attr("position", c), o.attr(
						"position", u);
					var m = {
						x: 0,
						y: 0
					};
					return m[p] = l[p] + d + h[p], m[g] = Math.max(l[g], h[g]), m[v] = Math.min(0, h[v] + c[1 - f]), m
				}
				return o.attr("position", u), this.group.getBoundingRect()
			},
			remove: function() {
				this.getContentGroup().removeAll(), this._isFirstRender = !0
			}
		}),
		US = function(t) {
			var e = t.findComponents({
				mainType: "legend"
			});
			e && e.length && t.filterSeries(function(t) {
				for (var n = 0; n < e.length; n++)
					if (!e[n].isSelected(t.name)) return !1;
				return !0
			})
		};
	wu(F_.PROCESSOR.SERIES_FILTER, US), qy.registerSubTypeDefaulter("legend", function() {
		return "plain"
	});
	var YS = VS.extend({
			type: "legend.scroll",
			setScrollDataIndex: function(t) {
				this.option.scrollDataIndex = t
			},
			defaultOption: {
				scrollDataIndex: 0,
				pageButtonItemGap: 5,
				pageButtonGap: null,
				pageButtonPosition: "end",
				pageFormatter: "{current}/{total}",
				pageIcons: {
					horizontal: ["M0,0L12,-10L12,10z", "M0,0L-12,-10L-12,10z"],
					vertical: ["M0,0L20,0L10,-20z", "M0,0L20,0L10,20z"]
				},
				pageIconColor: "#2f4554",
				pageIconInactiveColor: "#aaa",
				pageIconSize: 15,
				pageTextStyle: {
					color: "#333"
				},
				animationDurationUpdate: 800
			},
			init: function(t, e, n, i) {
				var r = Qo(t);
				YS.superCall(this, "init", t, e, n, i), df(this, t, r)
			},
			mergeOption: function(t, e) {
				YS.superCall(this, "mergeOption", t, e), df(this, this.option, t)
			}
		}),
		qS = Mg,
		jS = ["width", "height"],
		ZS = ["x", "y"],
		KS = XS.extend({
			type: "legend.scroll",
			newlineDisabled: !0,
			init: function() {
				KS.superCall(this, "init"), this._currentIndex = 0, this.group.add(this._containerGroup = new qS), this._containerGroup
					.add(this.getContentGroup()), this.group.add(this._controllerGroup = new qS), this._showController
			},
			resetInner: function() {
				KS.superCall(this, "resetInner"), this._controllerGroup.removeAll(), this._containerGroup.removeClipPath(), this
					._containerGroup.__rectSize = null
			},
			renderInner: function(t, e, n, i, r, a, o) {
				function s(t, n) {
					var r = t + "DataIndex",
						a = so(e.get("pageIcons", !0)[e.getOrient().name][n], {
							onclick: y(l._pageGo, l, r, e, i)
						}, {
							x: -h[0] / 2,
							y: -h[1] / 2,
							width: h[0],
							height: h[1]
						});
					a.name = t, u.add(a)
				}
				var l = this;
				KS.superCall(this, "renderInner", t, e, n, i, r, a, o);
				var u = this._controllerGroup,
					h = e.get("pageIconSize", !0);
				_(h) || (h = [h, h]), s("pagePrev", 0);
				var c = e.getModel("pageTextStyle");
				u.add(new Fm({
					name: "pageText",
					style: {
						textFill: c.getTextColor(),
						font: c.getFont(),
						textVerticalAlign: "middle",
						textAlign: "center"
					},
					silent: !0
				})), s("pageNext", 1)
			},
			layoutInner: function(t, e, n, r, a, o) {
				var s = this.getSelectorGroup(),
					l = t.getOrient().index,
					u = jS[l],
					h = ZS[l],
					c = jS[1 - l],
					d = ZS[1 - l];
				a && Xy("horizontal", s, t.get("selectorItemGap", !0));
				var f = t.get("selectorButtonGap", !0),
					p = s.getBoundingRect(),
					g = [-p.x, -p.y],
					v = i(n);
				a && (v[u] = n[u] - p[u] - f);
				var m = this._layoutContentAndController(t, r, v, l, u, c, d);
				if (a) {
					if ("end" === o) g[l] += m[u] + f;
					else {
						var y = p[u] + f;
						g[l] -= y, m[h] -= y
					}
					m[u] += p[u] + f, g[1 - l] += m[d] + m[c] / 2 - p[c] / 2, m[c] = Math.max(m[c], p[c]), m[d] = Math.min(m[d], p[
						d] + g[1 - l]), s.attr("position", g)
				}
				return m
			},
			_layoutContentAndController: function(t, e, n, i, r, a, o) {
				var s = this.getContentGroup(),
					l = this._containerGroup,
					u = this._controllerGroup;
				Xy(t.get("orient"), s, t.get("itemGap"), i ? n.width : null, i ? null : n.height), Xy("horizontal", u, t.get(
					"pageButtonItemGap", !0));
				var h = s.getBoundingRect(),
					c = u.getBoundingRect(),
					d = this._showController = h[r] > n[r],
					f = [-h.x, -h.y];
				e || (f[i] = s.position[i]);
				var p = [0, 0],
					g = [-c.x, -c.y],
					v = D(t.get("pageButtonGap", !0), t.get("itemGap", !0));
				if (d) {
					var m = t.get("pageButtonPosition", !0);
					"end" === m ? g[i] += n[r] - c[r] : p[i] += c[r] + v
				}
				g[1 - i] += h[a] / 2 - c[a] / 2, s.attr("position", f), l.attr("position", p), u.attr("position", g);
				var y = {
					x: 0,
					y: 0
				};
				if (y[r] = d ? n[r] : h[r], y[a] = Math.max(h[a], c[a]), y[o] = Math.min(0, c[o] + g[1 - i]), l.__rectSize = n[r],
					d) {
					var x = {
						x: 0,
						y: 0
					};
					x[r] = Math.max(n[r] - c[r] - v, 0), x[a] = y[a], l.setClipPath(new $m({
						shape: x
					})), l.__rectSize = x[r]
				} else u.eachChild(function(t) {
					t.attr({
						invisible: !0,
						silent: !0
					})
				});
				var _ = this._getPageInfo(t);
				return null != _.pageIndex && Ja(s, {
					position: _.contentPosition
				}, d ? t : !1), this._updatePageInfoView(t, _), y
			},
			_pageGo: function(t, e, n) {
				var i = this._getPageInfo(e)[t];
				null != i && n.dispatchAction({
					type: "legendScroll",
					scrollDataIndex: i,
					legendId: e.id
				})
			},
			_updatePageInfoView: function(t, e) {
				var n = this._controllerGroup;
				f(["pagePrev", "pageNext"], function(i) {
					var r = null != e[i + "DataIndex"],
						a = n.childOfName(i);
					a && (a.setStyle("fill", r ? t.get("pageIconColor", !0) : t.get("pageIconInactiveColor", !0)), a.cursor = r ?
						"pointer" : "default")
				});
				var i = n.childOfName("pageText"),
					r = t.get("pageFormatter"),
					a = e.pageIndex,
					o = null != a ? a + 1 : 0,
					s = e.pageCount;
				i && r && i.setStyle("text", b(r) ? r.replace("{current}", o).replace("{total}", s) : r({
					current: o,
					total: s
				}))
			},
			_getPageInfo: function(t) {
				function e(t) {
					if (t) {
						var e = t.getBoundingRect(),
							n = e[l] + t.position[o];
						return {
							s: n,
							e: n + e[s],
							i: t.__legendDataIndex
						}
					}
				}

				function n(t, e) {
					return t.e >= e && t.s <= e + a
				}
				var i = t.get("scrollDataIndex", !0),
					r = this.getContentGroup(),
					a = this._containerGroup.__rectSize,
					o = t.getOrient().index,
					s = jS[o],
					l = ZS[o],
					u = this._findTargetItemIndex(i),
					h = r.children(),
					c = h[u],
					d = h.length,
					f = d ? 1 : 0,
					p = {
						contentPosition: r.position.slice(),
						pageCount: f,
						pageIndex: f - 1,
						pagePrevDataIndex: null,
						pageNextDataIndex: null
					};
				if (!c) return p;
				var g = e(c);
				p.contentPosition[o] = -g.s;
				for (var v = u + 1, m = g, y = g, x = null; d >= v; ++v) x = e(h[v]), (!x && y.e > m.s + a || x && !n(x, m.s)) &&
					(m = y.i > m.i ? y : x, m && (null == p.pageNextDataIndex && (p.pageNextDataIndex = m.i), ++p.pageCount)), y =
					x;
				for (var v = u - 1, m = g, y = g, x = null; v >= -1; --v) x = e(h[v]), x && n(y, x.s) || !(m.i < y.i) || (y = m,
					null == p.pagePrevDataIndex && (p.pagePrevDataIndex = m.i), ++p.pageCount, ++p.pageIndex), m = x;
				return p
			},
			_findTargetItemIndex: function(t) {
				if (!this._showController) return 0;
				var e, n, i = this.getContentGroup();
				return i.eachChild(function(i, r) {
					var a = i.__legendDataIndex;
					null == n && null != a && (n = r), a === t && (e = r)
				}), null != e ? e : n
			}
		});
	Su("legendScroll", "legendscroll", function(t, e) {
		var n = t.scrollDataIndex;
		null != n && e.eachComponent({
			mainType: "legend",
			subType: "scroll",
			query: t
		}, function(t) {
			t.setScrollDataIndex(n)
		})
	});
	var $S = function(t, e) {
			var n, i = [],
				r = t.seriesIndex;
			if (null == r || !(n = e.getSeriesByIndex(r))) return {
				point: []
			};
			var a = n.getData(),
				o = sr(a, t);
			if (null == o || 0 > o || _(o)) return {
				point: []
			};
			var s = a.getItemGraphicEl(o),
				l = n.coordinateSystem;
			if (n.getTooltipPosition) i = n.getTooltipPosition(o) || [];
			else if (l && l.dataToPoint) i = l.dataToPoint(a.getValues(p(l.dimensions, function(t) {
				return a.mapDimension(t)
			}), o, !0)) || [];
			else if (s) {
				var u = s.getBoundingRect().clone();
				u.applyTransform(s.transform), i = [u.x + u.width / 2, u.y + u.height / 2]
			}
			return {
				point: i,
				el: s
			}
		},
		QS = f,
		JS = x,
		tM = lr(),
		eM = function(t, e, n) {
			var i = t.currTrigger,
				r = [t.x, t.y],
				a = t,
				o = t.dispatchAction || y(n.dispatchAction, n),
				s = e.getComponent("axisPointer").coordSysAxesInfo;
			if (s) {
				bf(r) && (r = $S({
					seriesIndex: a.seriesIndex,
					dataIndex: a.dataIndex
				}, e).point);
				var l = bf(r),
					u = a.axesInfo,
					h = s.axesInfo,
					c = "leave" === i || bf(r),
					d = {},
					f = {},
					p = {
						list: [],
						map: {}
					},
					g = {
						showPointer: JS(gf, f),
						showTooltip: JS(vf, p)
					};
				QS(s.coordSysMap, function(t, e) {
					var n = l || t.containPoint(r);
					QS(s.coordSysAxesInfo[e], function(t) {
						var e = t.axis,
							i = _f(u, t);
						if (!c && n && (!u || i)) {
							var a = i && i.value;
							null != a || l || (a = e.pointToData(r)), null != a && ff(t, a, g, !1, d)
						}
					})
				});
				var v = {};
				return QS(h, function(t, e) {
					var n = t.linkGroup;
					n && !f[e] && QS(n.axesInfo, function(e, i) {
						var r = f[i];
						if (e !== t && r) {
							var a = r.value;
							n.mapper && (a = t.axis.scale.parse(n.mapper(a, wf(e), wf(t)))), v[t.key] = a
						}
					})
				}), QS(v, function(t, e) {
					ff(h[e], t, g, !0, d)
				}), mf(f, h, d), yf(p, r, t, o), xf(h, o, n), d
			}
		},
		nM = (ku({
			type: "axisPointer",
			coordSysAxesInfo: null,
			defaultOption: {
				show: "auto",
				triggerOn: null,
				zlevel: 0,
				z: 50,
				type: "line",
				snap: !1,
				triggerTooltip: !0,
				value: null,
				status: null,
				link: [],
				animation: null,
				animationDurationUpdate: 200,
				lineStyle: {
					color: "#aaa",
					width: 1,
					type: "solid"
				},
				shadowStyle: {
					color: "rgba(150,150,150,0.3)"
				},
				label: {
					show: !0,
					formatter: null,
					precision: "auto",
					margin: 3,
					color: "#fff",
					padding: [5, 7, 5, 7],
					backgroundColor: "auto",
					borderColor: null,
					borderWidth: 0,
					shadowBlur: 3,
					shadowColor: "#aaa"
				},
				handle: {
					show: !1,
					icon: "M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",
					size: 45,
					margin: 50,
					color: "#333",
					shadowBlur: 3,
					shadowColor: "#aaa",
					shadowOffsetX: 0,
					shadowOffsetY: 2,
					throttle: 40
				}
			}
		}), lr()),
		iM = f,
		rM = Pu({
			type: "axisPointer",
			render: function(t, e, n) {
				var i = e.getComponent("tooltip"),
					r = t.get("triggerOn") || i && i.get("triggerOn") || "mousemove|click";
				Sf("axisPointer", n, function(t, e, n) {
					"none" !== r && ("leave" === t || r.indexOf(t) >= 0) && n({
						type: "updateAxisPointer",
						currTrigger: t,
						x: e && e.offsetX,
						y: e && e.offsetY
					})
				})
			},
			remove: function(t, e) {
				Df(e.getZr(), "axisPointer"), rM.superApply(this._model, "remove", arguments)
			},
			dispose: function(t, e) {
				Df("axisPointer", e), rM.superApply(this._model, "dispose", arguments)
			}
		}),
		aM = lr(),
		oM = i,
		sM = y;
	kf.prototype = {
		_group: null,
		_lastGraphicKey: null,
		_handle: null,
		_dragging: !1,
		_lastValue: null,
		_lastStatus: null,
		_payloadInfo: null,
		animationThreshold: 15,
		render: function(t, e, n, i) {
			var r = e.get("value"),
				a = e.get("status");
			if (this._axisModel = t, this._axisPointerModel = e, this._api = n, i || this._lastValue !== r || this._lastStatus !==
				a) {
				this._lastValue = r, this._lastStatus = a;
				var o = this._group,
					s = this._handle;
				if (!a || "hide" === a) return o && o.hide(), void(s && s.hide());
				o && o.show(), s && s.show();
				var l = {};
				this.makeElOption(l, r, t, e, n);
				var u = l.graphicKey;
				u !== this._lastGraphicKey && this.clear(n), this._lastGraphicKey = u;
				var h = this._moveAnimation = this.determineAnimation(t, e);
				if (o) {
					var c = x(Pf, e, h);
					this.updatePointerEl(o, l, c, e), this.updateLabelEl(o, l, c, e)
				} else o = this._group = new Mg, this.createPointerEl(o, l, t, e), this.createLabelEl(o, l, t, e), n.getZr().add(
					o);
				Bf(o, e, !0), this._renderHandle(r)
			}
		},
		remove: function(t) {
			this.clear(t)
		},
		dispose: function(t) {
			this.clear(t)
		},
		determineAnimation: function(t, e) {
			var n = e.get("animation"),
				i = t.axis,
				r = "category" === i.type,
				a = e.get("snap");
			if (!a && !r) return !1;
			if ("auto" === n || null == n) {
				var o = this.animationThreshold;
				if (r && i.getBandWidth() > o) return !0;
				if (a) {
					var s = hd(t).seriesDataCount,
						l = i.getExtent();
					return Math.abs(l[0] - l[1]) / s > o
				}
				return !1
			}
			return n === !0
		},
		makeElOption: function() {},
		createPointerEl: function(t, e) {
			var n = e.pointer;
			if (n) {
				var i = aM(t).pointerEl = new by[n.type](oM(e.pointer));
				t.add(i)
			}
		},
		createLabelEl: function(t, e, n, i) {
			if (e.label) {
				var r = aM(t).labelEl = new $m(oM(e.label));
				t.add(r), Of(r, i)
			}
		},
		updatePointerEl: function(t, e, n) {
			var i = aM(t).pointerEl;
			i && e.pointer && (i.setStyle(e.pointer.style), n(i, {
				shape: e.pointer.shape
			}))
		},
		updateLabelEl: function(t, e, n, i) {
			var r = aM(t).labelEl;
			r && (r.setStyle(e.label.style), n(r, {
				shape: e.label.shape,
				position: e.label.position
			}), Of(r, i))
		},
		_renderHandle: function(t) {
			if (!this._dragging && this.updateHandleTransform) {
				var e = this._axisPointerModel,
					n = this._api.getZr(),
					i = this._handle,
					r = e.getModel("handle"),
					a = e.get("status");
				if (!r.get("show") || !a || "hide" === a) return i && n.remove(i), void(this._handle = null);
				var o;
				this._handle || (o = !0, i = this._handle = so(r.get("icon"), {
					cursor: "move",
					draggable: !0,
					onmousemove: function(t) {
						Fp(t.event)
					},
					onmousedown: sM(this._onHandleDragMove, this, 0, 0),
					drift: sM(this._onHandleDragMove, this),
					ondragend: sM(this._onHandleDragEnd, this)
				}), n.add(i)), Bf(i, e, !1);
				var s = ["color", "borderColor", "borderWidth", "opacity", "shadowColor", "shadowBlur", "shadowOffsetX",
					"shadowOffsetY"
				];
				i.setStyle(r.getItemStyle(null, s));
				var l = r.get("size");
				_(l) || (l = [l, l]), i.attr("scale", [l[0] / 2, l[1] / 2]), ml(this, "_doDispatchAxisPointer", r.get("throttle") ||
					0, "fixRate"), this._moveHandleToValue(t, o)
			}
		},
		_moveHandleToValue: function(t, e) {
			Pf(this._axisPointerModel, !e && this._moveAnimation, this._handle, Ef(this.getHandleTransform(t, this._axisModel,
				this._axisPointerModel)))
		},
		_onHandleDragMove: function(t, e) {
			var n = this._handle;
			if (n) {
				this._dragging = !0;
				var i = this.updateHandleTransform(Ef(n), [t, e], this._axisModel, this._axisPointerModel);
				this._payloadInfo = i, n.stopAnimation(), n.attr(Ef(i)), aM(n).lastProp = null, this._doDispatchAxisPointer()
			}
		},
		_doDispatchAxisPointer: function() {
			var t = this._handle;
			if (t) {
				var e = this._payloadInfo,
					n = this._axisModel;
				this._api.dispatchAction({
					type: "updateAxisPointer",
					x: e.cursorPoint[0],
					y: e.cursorPoint[1],
					tooltipOption: e.tooltipOption,
					axesInfo: [{
						axisDim: n.axis.dim,
						axisIndex: n.componentIndex
					}]
				})
			}
		},
		_onHandleDragEnd: function() {
			this._dragging = !1;
			var t = this._handle;
			if (t) {
				var e = this._axisPointerModel.get("value");
				this._moveHandleToValue(e), this._api.dispatchAction({
					type: "hideTip"
				})
			}
		},
		getHandleTransform: null,
		updateHandleTransform: null,
		clear: function(t) {
			this._lastValue = null, this._lastStatus = null;
			var e = t.getZr(),
				n = this._group,
				i = this._handle;
			e && n && (this._lastGraphicKey = null, n && e.remove(n), i && e.remove(i), this._group = null, this._handle =
				null, this._payloadInfo = null)
		},
		doClear: function() {},
		buildLabel: function(t, e, n) {
			return n = n || 0, {
				x: t[n],
				y: t[1 - n],
				width: e[n],
				height: e[1 - n]
			}
		}
	}, kf.prototype.constructor = kf, vr(kf);
	var lM = kf.extend({
			makeElOption: function(t, e, n, i, r) {
				var a = n.axis,
					o = a.grid,
					s = i.get("type"),
					l = Xf(o, a).getOtherAxis(a).getGlobalExtent(),
					u = a.toGlobalCoord(a.dataToCoord(e, !0));
				if (s && "none" !== s) {
					var h = zf(i),
						c = uM[s](a, u, l);
					c.style = h, t.graphicKey = c.type, t.pointer = c
				}
				var d = vd(o.model, n);
				Hf(e, t, d, n, i, r)
			},
			getHandleTransform: function(t, e, n) {
				var i = vd(e.axis.grid.model, e, {
					labelInside: !1
				});
				return i.labelMargin = n.get("handle.margin"), {
					position: Vf(e.axis, t, i),
					rotation: i.rotation + (i.labelDirection < 0 ? Math.PI : 0)
				}
			},
			updateHandleTransform: function(t, e, n) {
				var i = n.axis,
					r = i.grid,
					a = i.getGlobalExtent(!0),
					o = Xf(r, i).getOtherAxis(i).getGlobalExtent(),
					s = "x" === i.dim ? 0 : 1,
					l = t.position;
				l[s] += e[s], l[s] = Math.min(a[1], l[s]), l[s] = Math.max(a[0], l[s]);
				var u = (o[1] + o[0]) / 2,
					h = [u, u];
				h[s] = l[s];
				var c = [{
					verticalAlign: "middle"
				}, {
					align: "center"
				}];
				return {
					position: l,
					rotation: t.rotation,
					cursorPoint: h,
					tooltipOption: c[s]
				}
			}
		}),
		uM = {
			line: function(t, e, n) {
				var i = Gf([e, n[0]], [e, n[1]], Uf(t));
				return {
					type: "Line",
					subPixelOptimize: !0,
					shape: i
				}
			},
			shadow: function(t, e, n) {
				var i = Math.max(1, t.getBandWidth()),
					r = n[1] - n[0];
				return {
					type: "Rect",
					shape: Wf([e - i / 2, n[0]], [i, r], Uf(t))
				}
			}
		};
	jb.registerAxisPointerClass("CartesianAxisPointer", lM), _u(function(t) {
		if (t) {
			(!t.axisPointer || 0 === t.axisPointer.length) && (t.axisPointer = {});
			var e = t.axisPointer.link;
			e && !_(e) && (t.axisPointer.link = [e])
		}
	}), wu(F_.PROCESSOR.STATISTIC, function(t, e) {
		t.getComponent("axisPointer").coordSysAxesInfo = id(t, e)
	}), Su({
		type: "updateAxisPointer",
		event: "updateAxisPointer",
		update: ":updateAxisPointer"
	}, eM), ku({
		type: "tooltip",
		dependencies: ["axisPointer"],
		defaultOption: {
			zlevel: 0,
			z: 60,
			show: !0,
			showContent: !0,
			trigger: "item",
			triggerOn: "mousemove|click",
			alwaysShowContent: !1,
			displayMode: "single",
			renderMode: "auto",
			confine: !1,
			showDelay: 0,
			hideDelay: 100,
			transitionDuration: .4,
			enterable: !1,
			backgroundColor: "rgba(50,50,50,0.7)",
			borderColor: "#333",
			borderRadius: 4,
			borderWidth: 0,
			padding: 5,
			extraCssText: "",
			axisPointer: {
				type: "line",
				axis: "auto",
				animation: "auto",
				animationDurationUpdate: 200,
				animationEasingUpdate: "exponentialOut",
				crossStyle: {
					color: "#999",
					width: 1,
					type: "dashed",
					textStyle: {}
				}
			},
			textStyle: {
				color: "#fff",
				fontSize: 14
			}
		}
	});
	var hM = f,
		cM = No,
		dM = ["", "-webkit-", "-moz-", "-o-"],
		fM = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;";
	Kf.prototype = {
		constructor: Kf,
		_enterable: !0,
		update: function(t) {
			var e = this._container,
				n = e.currentStyle || document.defaultView.getComputedStyle(e),
				i = e.style;
			"absolute" !== i.position && "absolute" !== n.position && (i.position = "relative");
			var r = t.get("alwaysShowContent");
			r && this._moveTooltipIfResized()
		},
		_moveTooltipIfResized: function() {
			var t = this._styleCoord[2],
				e = this._styleCoord[3],
				n = t * this._zr.getWidth(),
				i = e * this._zr.getHeight();
			this.moveTo(n, i)
		},
		show: function(t) {
			clearTimeout(this._hideTimeout);
			var e = this.el,
				n = this._styleCoord;
			e.style.cssText = fM + jf(t) + ";left:" + n[0] + "px;top:" + n[1] + "px;" + (t.get("extraCssText") || ""), e.style
				.display = e.innerHTML ? "block" : "none", e.style.pointerEvents = this._enterable ? "auto" : "none", this._show = !
				0
		},
		setContent: function(t) {
			this.el.innerHTML = null == t ? "" : t
		},
		setEnterable: function(t) {
			this._enterable = t
		},
		getSize: function() {
			var t = this.el;
			return [t.clientWidth, t.clientHeight]
		},
		moveTo: function(t, e) {
			var n = this._styleCoord;
			Zf(n, this._zr, this._appendToBody, t, e);
			var i = this.el.style;
			i.left = n[0] + "px", i.top = n[1] + "px"
		},
		hide: function() {
			this.el.style.display = "none", this._show = !1
		},
		hideLater: function(t) {
			!this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout =
				setTimeout(y(this.hide, this), t)) : this.hide())
		},
		isShow: function() {
			return this._show
		},
		dispose: function() {
			this.el.parentNode.removeChild(this.el)
		},
		getOuterSize: function() {
			var t = this.el.clientWidth,
				e = this.el.clientHeight;
			if (document.defaultView && document.defaultView.getComputedStyle) {
				var n = document.defaultView.getComputedStyle(this.el);
				n && (t += parseInt(n.borderLeftWidth, 10) + parseInt(n.borderRightWidth, 10), e += parseInt(n.borderTopWidth,
					10) + parseInt(n.borderBottomWidth, 10))
			}
			return {
				width: t,
				height: e
			}
		}
	}, Qf.prototype = {
		constructor: Qf,
		_enterable: !0,
		update: function(t) {
			var e = t.get("alwaysShowContent");
			e && this._moveTooltipIfResized()
		},
		_moveTooltipIfResized: function() {
			var t = this._styleCoord[2],
				e = this._styleCoord[3],
				n = t * this._zr.getWidth(),
				i = e * this._zr.getHeight();
			this.moveTo(n, i)
		},
		show: function() {
			this._hideTimeout && clearTimeout(this._hideTimeout), this.el.attr("show", !0), this._show = !0
		},
		setContent: function(t, e, n) {
			this.el && this._zr.remove(this.el);
			for (var i = {}, r = t, a = "{marker", o = "|}", s = r.indexOf(a); s >= 0;) {
				var l = r.indexOf(o),
					u = r.substr(s + a.length, l - s - a.length);
				i["marker" + u] = u.indexOf("sub") > -1 ? {
					textWidth: 4,
					textHeight: 4,
					textBorderRadius: 2,
					textBackgroundColor: e[u],
					textOffset: [3, 0]
				} : {
					textWidth: 10,
					textHeight: 10,
					textBorderRadius: 5,
					textBackgroundColor: e[u]
				}, r = r.substr(l + 1), s = r.indexOf("{marker")
			}
			var h = n.getModel("textStyle"),
				c = h.get("fontSize"),
				d = n.get("textLineHeight");
			null == d && (d = Math.round(3 * c / 2)), this.el = new Fm({
				style: Wa({}, h, {
					rich: i,
					text: t,
					textBackgroundColor: n.get("backgroundColor"),
					textBorderRadius: n.get("borderRadius"),
					textFill: n.get("textStyle.color"),
					textPadding: n.get("padding"),
					textLineHeight: d
				}),
				z: n.get("z")
			}), this._zr.add(this.el);
			var f = this;
			this.el.on("mouseover", function() {
				f._enterable && (clearTimeout(f._hideTimeout), f._show = !0), f._inContent = !0
			}), this.el.on("mouseout", function() {
				f._enterable && f._show && f.hideLater(f._hideDelay), f._inContent = !1
			})
		},
		setEnterable: function(t) {
			this._enterable = t
		},
		getSize: function() {
			var t = this.el.getBoundingRect();
			return [t.width, t.height]
		},
		moveTo: function(t, e) {
			if (this.el) {
				var n = this._styleCoord;
				$f(n, this._zr, t, e), this.el.attr("position", [n[0], n[1]])
			}
		},
		hide: function() {
			this.el && this.el.hide(), this._show = !1
		},
		hideLater: function(t) {
			!this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout =
				setTimeout(y(this.hide, this), t)) : this.hide())
		},
		isShow: function() {
			return this._show
		},
		dispose: function() {
			clearTimeout(this._hideTimeout), this.el && this._zr.remove(this.el)
		},
		getOuterSize: function() {
			var t = this.getSize();
			return {
				width: t[0],
				height: t[1]
			}
		}
	};
	var pM = y,
		gM = f,
		vM = wo,
		mM = new $m({
			shape: {
				x: -1,
				y: -1,
				width: 2,
				height: 2
			}
		});
	Pu({
			type: "tooltip",
			init: function(t, e) {
				if (!hp.node) {
					var n = t.getComponent("tooltip"),
						i = n.get("renderMode");
					this._renderMode = fr(i);
					var r;
					"html" === this._renderMode ? (r = new Kf(e.getDom(), e, {
						appendToBody: n.get("appendToBody", !0)
					}), this._newLine = "<br/>") : (r = new Qf(e), this._newLine = "\n"), this._tooltipContent = r
				}
			},
			render: function(t, e, n) {
				if (!hp.node) {
					this.group.removeAll(), this._tooltipModel = t, this._ecModel = e, this._api = n, this._lastDataByCoordSys =
						null, this._alwaysShowContent = t.get("alwaysShowContent");
					var i = this._tooltipContent;
					i.update(t), i.setEnterable(t.get("enterable")), this._initGlobalListener(), this._keepShow()
				}
			},
			_initGlobalListener: function() {
				var t = this._tooltipModel,
					e = t.get("triggerOn");
				Sf("itemTooltip", this._api, pM(function(t, n, i) {
					"none" !== e && (e.indexOf(t) >= 0 ? this._tryShow(n, i) : "leave" === t && this._hide(i))
				}, this))
			},
			_keepShow: function() {
				var t = this._tooltipModel,
					e = this._ecModel,
					n = this._api;
				if (null != this._lastX && null != this._lastY && "none" !== t.get("triggerOn")) {
					var i = this;
					clearTimeout(this._refreshUpdateTimeout), this._refreshUpdateTimeout = setTimeout(function() {
						!n.isDisposed() && i.manuallyShowTip(t, e, n, {
							x: i._lastX,
							y: i._lastY
						})
					})
				}
			},
			manuallyShowTip: function(t, e, n, i) {
				if (i.from !== this.uid && !hp.node) {
					var r = tp(i, n);
					this._ticket = "";
					var a = i.dataByCoordSys;
					if (i.tooltip && null != i.x && null != i.y) {
						var o = mM;
						o.position = [i.x, i.y], o.update(), o.tooltip = i.tooltip, this._tryShow({
							offsetX: i.x,
							offsetY: i.y,
							target: o
						}, r)
					} else if (a) this._tryShow({
						offsetX: i.x,
						offsetY: i.y,
						position: i.position,
						dataByCoordSys: i.dataByCoordSys,
						tooltipOption: i.tooltipOption
					}, r);
					else if (null != i.seriesIndex) {
						if (this._manuallyAxisShowTip(t, e, n, i)) return;
						var s = $S(i, e),
							l = s.point[0],
							u = s.point[1];
						null != l && null != u && this._tryShow({
							offsetX: l,
							offsetY: u,
							position: i.position,
							target: s.el
						}, r)
					} else null != i.x && null != i.y && (n.dispatchAction({
						type: "updateAxisPointer",
						x: i.x,
						y: i.y
					}), this._tryShow({
						offsetX: i.x,
						offsetY: i.y,
						position: i.position,
						target: n.getZr().findHover(i.x, i.y).target
					}, r))
				}
			},
			manuallyHideTip: function(t, e, n, i) {
				var r = this._tooltipContent;
				!this._alwaysShowContent && this._tooltipModel && r.hideLater(this._tooltipModel.get("hideDelay")), this._lastX =
					this._lastY = null, i.from !== this.uid && this._hide(tp(i, n))
			},
			_manuallyAxisShowTip: function(t, e, n, i) {
				var r = i.seriesIndex,
					a = i.dataIndex,
					o = e.getComponent("axisPointer").coordSysAxesInfo;
				if (null != r && null != a && null != o) {
					var s = e.getSeriesByIndex(r);
					if (s) {
						var l = s.getData(),
							t = Jf([l.getItemModel(a), s, (s.coordinateSystem || {}).model, t]);
						if ("axis" === t.get("trigger")) return n.dispatchAction({
							type: "updateAxisPointer",
							seriesIndex: r,
							dataIndex: a,
							position: i.position
						}), !0
					}
				}
			},
			_tryShow: function(t, e) {
				var n = t.target,
					i = this._tooltipModel;
				if (i) {
					this._lastX = t.offsetX, this._lastY = t.offsetY;
					var r = t.dataByCoordSys;
					r && r.length ? this._showAxisTooltip(r, t) : n && null != n.dataIndex ? (this._lastDataByCoordSys = null, this
						._showSeriesItemTooltip(t, n, e)) : n && n.tooltip ? (this._lastDataByCoordSys = null, this._showComponentItemTooltip(
						t, n, e)) : (this._lastDataByCoordSys = null, this._hide(e))
				}
			},
			_showOrMove: function(t, e) {
				var n = t.get("showDelay");
				e = y(e, this), clearTimeout(this._showTimout), n > 0 ? this._showTimout = setTimeout(e, n) : e()
			},
			_showAxisTooltip: function(t, e) {
				var n = this._ecModel,
					i = this._tooltipModel,
					a = [e.offsetX, e.offsetY],
					o = [],
					s = [],
					l = Jf([e.tooltipOption, i]),
					u = this._renderMode,
					h = this._newLine,
					c = {};
				gM(t, function(t) {
					gM(t.dataByAxis, function(t) {
						var e = n.getComponent(t.axisDim + "Axis", t.axisIndex),
							i = t.value,
							a = [];
						if (e && null != i) {
							var l = Ff(i, e.axis, n, t.seriesDataIndices, t.valueLabelOpt);
							f(t.seriesDataIndices, function(o) {
								var h = n.getSeriesByIndex(o.seriesIndex),
									d = o.dataIndexInside,
									f = h && h.getDataParams(d);
								if (f.axisDim = t.axisDim, f.axisIndex = t.axisIndex, f.axisType = t.axisType, f.axisId = t.axisId, f.axisValue =
									Wh(e.axis, i), f.axisValueLabel = l, f) {
									s.push(f);
									var p, g = h.formatTooltip(d, !0, null, u);
									if (S(g)) {
										p = g.html;
										var v = g.markers;
										r(c, v)
									} else p = g;
									a.push(p)
								}
							});
							var d = l;
							o.push("html" !== u ? a.join(h) : (d ? Fo(d) + h : "") + a.join(h))
						}
					})
				}, this), o.reverse(), o = o.join(this._newLine + this._newLine);
				var d = e.position;
				this._showOrMove(l, function() {
					this._updateContentNotChangedOnAxis(t) ? this._updatePosition(l, d, a[0], a[1], this._tooltipContent, s) :
						this._showTooltipContent(l, o, s, Math.random(), a[0], a[1], d, void 0, c)
				})
			},
			_showSeriesItemTooltip: function(t, e, n) {
				var i = this._ecModel,
					r = e.seriesIndex,
					a = i.getSeriesByIndex(r),
					o = e.dataModel || a,
					s = e.dataIndex,
					l = e.dataType,
					u = o.getData(l),
					h = Jf([u.getItemModel(s), o, a && (a.coordinateSystem || {}).model, this._tooltipModel]),
					c = h.get("trigger");
				if (null == c || "item" === c) {
					var d, f, p = o.getDataParams(s, l),
						g = o.formatTooltip(s, !1, l, this._renderMode);
					S(g) ? (d = g.html, f = g.markers) : (d = g, f = null);
					var v = "item_" + o.name + "_" + s;
					this._showOrMove(h, function() {
						this._showTooltipContent(h, d, p, v, t.offsetX, t.offsetY, t.position, t.target, f)
					}), n({
						type: "showTip",
						dataIndexInside: s,
						dataIndex: u.getRawIndex(s),
						seriesIndex: r,
						from: this.uid
					})
				}
			},
			_showComponentItemTooltip: function(t, e, n) {
				var i = e.tooltip;
				if ("string" == typeof i) {
					var r = i;
					i = {
						content: r,
						formatter: r
					}
				}
				var a = new fo(i, this._tooltipModel, this._ecModel),
					o = a.get("content"),
					s = Math.random();
				this._showOrMove(a, function() {
					this._showTooltipContent(a, o, a.get("formatterParams") || {}, s, t.offsetX, t.offsetY, t.position, e)
				}), n({
					type: "showTip",
					from: this.uid
				})
			},
			_showTooltipContent: function(t, e, n, i, r, a, o, s, l) {
				if (this._ticket = "", t.get("showContent") && t.get("show")) {
					var u = this._tooltipContent,
						h = t.get("formatter");
					o = o || t.get("position");
					var c = e;
					if (h && "string" == typeof h) c = Vo(h, n, !0);
					else if ("function" == typeof h) {
						var d = pM(function(e, i) {
							e === this._ticket && (u.setContent(i, l, t), this._updatePosition(t, o, r, a, u, n, s))
						}, this);
						this._ticket = i, c = h(n, i, d)
					}
					u.setContent(c, l, t), u.show(t), this._updatePosition(t, o, r, a, u, n, s)
				}
			},
			_updatePosition: function(t, e, n, i, r, a, o) {
				var s = this._api.getWidth(),
					l = this._api.getHeight();
				e = e || t.get("position");
				var u = r.getSize(),
					h = t.get("align"),
					c = t.get("verticalAlign"),
					d = o && o.getBoundingRect().clone();
				if (o && d.applyTransform(o.transform), "function" == typeof e && (e = e([n, i], a, r.el, d, {
						viewSize: [s, l],
						contentSize: u.slice()
					})), _(e)) n = vM(e[0], s), i = vM(e[1], l);
				else if (S(e)) {
					e.width = u[0], e.height = u[1];
					var f = Ko(e, {
						width: s,
						height: l
					});
					n = f.x, i = f.y, h = null, c = null
				} else if ("string" == typeof e && o) {
					var p = ip(e, d, u);
					n = p[0], i = p[1]
				} else {
					var p = ep(n, i, r, s, l, h ? null : 20, c ? null : 20);
					n = p[0], i = p[1]
				}
				if (h && (n -= rp(h) ? u[0] / 2 : "right" === h ? u[0] : 0), c && (i -= rp(c) ? u[1] / 2 : "bottom" === c ? u[1] :
						0), t.get("confine")) {
					var p = np(n, i, r, s, l);
					n = p[0], i = p[1]
				}
				r.moveTo(n, i)
			},
			_updateContentNotChangedOnAxis: function(t) {
				var e = this._lastDataByCoordSys,
					n = !!e && e.length === t.length;
				return n && gM(e, function(e, i) {
					var r = e.dataByAxis || {},
						a = t[i] || {},
						o = a.dataByAxis || [];
					n &= r.length === o.length, n && gM(r, function(t, e) {
						var i = o[e] || {},
							r = t.seriesDataIndices || [],
							a = i.seriesDataIndices || [];
						n &= t.value === i.value && t.axisType === i.axisType && t.axisId === i.axisId && r.length === a.length, n &&
							gM(r, function(t, e) {
								var i = a[e];
								n &= t.seriesIndex === i.seriesIndex && t.dataIndex === i.dataIndex
							})
					})
				}), this._lastDataByCoordSys = t, !!n
			},
			_hide: function(t) {
				this._lastDataByCoordSys = null, t({
					type: "hideTip",
					from: this.uid
				})
			},
			dispose: function(t, e) {
				hp.node || (this._tooltipContent.dispose(), Df("itemTooltip", e))
			}
		}), Su({
			type: "showTip",
			event: "showTip",
			update: "tooltip:manuallyShowTip"
		}, function() {}), Su({
			type: "hideTip",
			event: "hideTip",
			update: "tooltip:manuallyHideTip"
		}, function() {}), t.version = I_, t.dependencies = T_, t.PRIORITY = F_, t.init = fu, t.connect = pu, t.disConnect =
		gu, t.disconnect = aw, t.dispose = vu, t.getInstanceByDom = mu, t.getInstanceById = yu, t.registerTheme = xu, t.registerPreprocessor =
		_u, t.registerProcessor = wu, t.registerPostUpdate = bu, t.registerAction = Su, t.registerCoordinateSystem = Mu, t.getCoordinateSystemDimensions =
		Iu, t.registerLayout = Tu, t.registerVisual = Cu, t.registerLoading = Du, t.extendComponentModel = ku, t.extendComponentView =
		Pu, t.extendSeriesModel = Lu, t.extendChartView = Ou, t.setCanvasCreator = Eu, t.registerMap = Bu, t.getMap = zu, t.dataTool =
		ow, t.zrender = bv, t.number = Oy, t.format = Vy, t.throttle = vl, t.helper = lb, t.matrix = Yp, t.vector = kp, t.color =
		cg, t.parseGeoJSON = hb, t.parseGeoJson = pb, t.util = gb, t.graphic = vb, t.List = yw, t.Model = fo, t.Axis = fb, t
		.env = hp
});
